迭代法
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
pre = ListNode(0)
res = pre
while head and head.next:
pre.next = head.next #0->1->2->3->4
head.next = head.next.next #注意重点是这一句在连接第一个节点前需要先断开1,2两个节点的连接去连上第三个节点
pre.next.next = head #不然反转会破坏2和3的连接,将2指向1,会导致环的出现
pre = head #将res移到第2个节点
head = head.next #head移到第3个节点
pre.next = head #如果还剩一个节点需要连接起来
return res.next
递归法
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next: #终止条件
return head #返回
tmp = head.next #记录一下第二个节点
head.next = self.swapPairs(tmp.next) #第一个节点的下一个应该是后面的反转节点
tmp.next = head #归的时候将反转后的链表自后向前的连接上
return tmp #自后向前连接