Posts

Showing posts from May, 2019

HOW TO GET Nth NODE FROM THE END OF A LINKED LIST

how to get Nth NODE FROM THE END OF A LINKED LIST https://practice.geeksforgeeks.org/problems/nth-node-from-end-of-linked-list/1 solution 1: Time complexity O(n); space complexity O(1) int getNthFromLast(node *head, int n) { node *fa st =head; node * slow =head; for (int i =1; i<n;i++){ if ( fast ==0) return -1; fast =fast->next; } while (fast->next!=0){ fast =fast->next; slow =slow->next; } return slow->data; } solution 2: using stack Space complexity O(n) Time complexity O(n) int getNthFromLast(node *head, int n) { stack< int > s; node *cu = head; int count = 0 ; while (cu != 0 ) { s. push (cu->data); cu = cu-> next ; ++ count ; } if ( count < n) { return - 1 ; } while (n != 1 ) { s. pop (); --n; } return s.top(); }`` int getNthFromLast(node *head, int n) { node *fast = head; node *slow = head; //

Reverse A Linked List in Group of a Given Size

Reverse a Linked List in groups of a given size https://practice.geeksforgeeks.org/problems/reverse-a-linked-list-in-groups-of-given-size/1 Space complexity: O(0); Time complexity: O(n); struct node * reverse (struct node *head, int k) { int n = k; if (head == 0 || head->next == 0 ) return head; struct node * tempHead = head -> next ; head->next = 0 ; struct node * tail = head ; // head will become tail later //reverse K element while (tempHead != 0 && n> 1 ) { struct node * temp = tempHead ; tempHead = tempHead->next; temp->next = head; head = temp; n--; } tail->next = reverse(tempHead, k); return head; } # include <iostream> # include <string> using namespace std ; class node { public : int data; node *next; node( int d) { data = d; next = 0 ; } }; class linkedList { private : node *head; public : linkedList() { head = 0 ; } void a

How to Add 1 To A Number Represented As A LinkedList

HOW TO ADD 1 TO A NUMBER REPRESENTED AS A LINKED LIST A simple solution using a recursive method https://practice.geeksforgeeks.org/problems/add-1-to-a-number-represented-as-linked-list/1 Node *addOne(Node *head) { // Your Code here if (head-> data >= 10 ){ Node *newHead=new Node; newHead -> data = 1 ; head -> data =head-> data % 10 ; newHead -> next=head; head=newHead; return head; } if (head-> next== 0 ) { head -> data =head-> data + 1 ; return head; } else { N ode * temp=addOne(head-> next); head -> data =head-> data +temp-> data / 10 ; temp -> data =temp-> data % 10 ; } return head; }