Question: Swap Two Nodes in Linked List
Answer 1:
def swapNodes(self, head, v1, v2):
dummyHead = ListNode(-1, head)
pre_v1 = None
pre_v2 = None
curNode = dummyHead
while curNode.next:
if curNode.next.val == v1:
pre_v1 = curNode
elif curNode.next.val == v2:
pre_v2 = curNode
if pre_v1 and pre_v2:
pre_v1.next, pre_v2.next, pre_v1.next.next, pre_v2.next.next = \
pre_v2.next, pre_v1.next, pre_v2.next.next, pre_v1.next.next
break
curNode = curNode.next
return dummyHead.next
This answer lead to a wrong answer when the input is 1->2->3->4->null. The output should be 1->4->3->2->null. But it returns 1->4->null
If I change
pre_v1.next, pre_v2.next, pre_v1.next.next, pre_v2.next.next = \
pre_v2.next, pre_v1.next, pre_v2.next.next, pre_v1.next.next
to
pre_v1.next, pre_v2.next = pre_v2.next, pre_v1.next
pre_v1.next.next, pre_v2.next.next = pre_v2.next.next, pre_v1.next.next
The answer is correct.
Do I miss something? Is there any "trap" that I have to be careful about when swapping values in this way?