Google Interview Question

Reverse a linked list without using temporary variables.

Interview Answers

Anonymous

Oct 30, 2014

I was nervous and didn't answer it well. I should have done better if I calmed down a little.

Anonymous

Nov 2, 2014

public static void ReverseNode(Node n) { if (n.Next == null || n.Next == n) return; ReverseNode(n.Next) n.Next.Next = n n.Next = null }

Anonymous

Jun 13, 2015

pair reverse(Node* current){ if (current->next == NULL) return make_pair(current, current); auto result = reverse(current->next); result.second->next = current; current->next = NULL; return make_pair(result.first, current); }

Anonymous

Apr 16, 2022

Steve L. : Clever, but the question didn't specify a linked list of positive integers…but that trick, I _think_, could be used for the pointers in a language that used them.

Anonymous

Nov 5, 2014

The above doesn't work since n will be pointing at the last element in the end. It should still point at the start. This should work: void reverse(Node lis) { if (lis == null) { return; } if (lis.next == null) { return; } reverse(lis.next); while (lis.next != null) { lis.val = lis.val ^ lis.next.val; lis.next.val = lis.val ^ lis.next.val; lis.val = lis.val ^ lis.next.val; lis = lis.next; } }

2