Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4
, you should return the list as 2->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.
递归的解法
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ if head == None or head.next ==None: return head temp = head.next head.next = self.swapPairs(temp.next) temp.next = head return temp
直接循环的解法
class Solution(object): def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ if head == None or head.next ==None: return head p1 = head p2 = head.next p1.next = p2.next p2.next=p1 result = p2 while True: p0 = p1 p1 = p1.next if p1==None or p1.next ==None: return result else : p2 = p1.next p1.next = p2.next p2.next = p1 p0.next = p2