Problem:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->2->3->4
, you should return the list as2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
Idea:
Just do swap operation every two nodes. Therefore, after every swap operation, we need to move tmpNode backwards by two Nodes. Kindly note that the previous node should be recorded for the following swap operation.
Solution:
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
preheadNode = ListNode(-1)
preheadNode.next = head
tmpNode = None if head == None else head.next
preNode = preheadNode
while tmpNode != None:
nextNode = tmpNode.next
tmpNode.next = preNode.next
preNode.next.next = nextNode
preNode.next = tmpNode
preNode = tmpNode.next
tmpNode = None if nextNode == None else nextNode.next
return preheadNode.next