Meta interview question

Write the actual code to reverse a linked list

Interview Answers

Anonymous

7 Oct 2011

//iterative void Reverse(node** head) { node* prev = null; node* current = *head; while (current != null) { node* next = current->next; current->next = prev; prev = current; current = next; } *head = prev; } node* head; node* newHead; Reverse(head, null, &newHead); //recursive void Reverse(node* current, node* prev, node** newHead) { if (current->next != NULL) { Reverse(current->next, current); } else { *newHead = current; } current->next = prev; }

1

Anonymous

17 Nov 2011

// Java solution public static void reverseList (Node start) { currentNode = start; prevNode = null; while (currentNode !=null) { // save value of next Node nextNode = currentNode -> next; // change link currentNode -> next = prevNode; // List traverse prevNode = currentNode; currentNode = nextNode;; } }

1

Anonymous

27 Feb 2012

Node* reverse(Node* head) { Node* newHead = NULL; Node* node; while (head) { node = head; head = head->next; node->next = NULL; if (!newHead) { newHead = node; } else { node->next = newHead; newHead = node; } } return newHead; }

Anonymous

3 Apr 2012

void reverse(node* &head) { if(head == NULL) return; node *p = NULL, *cur = head; while(cur != NULL) { node* tmp = cur->nxt; cur->nxt = p; p = cur; cur = tmp; } head = cur; }