Pregunta de entrevista de Google

Reverse a linked list without using temporary variables.

Respuestas de entrevistas

Anónimo

30 oct 2014

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

Anónimo

2 nov 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 }

Anónimo

13 jun 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); }

Anónimo

16 abr 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.

Anónimo

5 nov 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