https://leetcode.cn/problems/swap-nodes-in-pairs/
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 迭代
dummy = ListNode()
dummy.next = head
cur = dummy
while cur and cur.next and cur.next.next:
tmp1 = cur.next # 节点1
tmp2 = cur.next.next # 节点2
cur.next = tmp2 # dummy指向节点2
tmp1.next = tmp2.next # 节点1指向节点3
tmp2.next = tmp1 # 节点2指向节点1
# 注意上述3步操作顺序,一定要先动节点1,再动节点2
# 如果先动了节点2,那么指向节点3的路就断了,就无法再和节点3连接了
cur = tmp1 # 移动指针到交换节点的前面,就像dummy在节点1和2前一样
return dummy.next