给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
注意: 节点暂存!用虚拟头结点
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
dummy = ListNode(-1)
dummy.next = head
pre = dummy
while pre.next and pre.next.next :
# 有两个节点需要暂存,分别是第一个和第三个,
tmp1 = pre.next # 第一个节点用tmp1暂存
tmp3 = pre.next.next.next # 第三个节点需要暂存
## 改变
pre.next = pre.next.next # 改变1,pre结点只向2,注意这里保证了dummy的next指向的是2(第一次两两交换时dummy即为pre,后面pre就通过其他赋值变化了与dummy无关了)
pre.next.next = tmp1 # 改变2,2指向1
pre.next.next.next = tmp3 # 改变3,原来的1指向原来的3,因此原来的第3个节点需要保存
pre = pre.next.next # pre向前走两步
return dummy.next #