Reverse a linked list without using temporary variables.
Interview Answers
Anonymous
30 Oct 2014
I was nervous and didn't answer it well. I should have done better if I calmed down a little.
Anonymous
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
}
Anonymous
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);
}
Anonymous
16 Apr 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
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;
}
}