题目:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
-
链表中节点的数目在范围 [0, 100] 内
-
0 <= Node.val <= 100
思路如下:
题解如下:
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode(next=head)
pre,cur = dummy,head
while cur and cur.next:
t = cur.next
pre.next = t
cur.next = t.next
t.next = cur
pre,cur = cur,cur.next
return dummy.next
示例流程:
以链表 1 -> 2 -> 3 -> 4 为例:
1.第一轮交换:
-
pre指向dummy,cur指向1,t指向2。
-
保存 t.next = 3。
-
调整指针:dummy -> 2 -> 1 -> 3。
-
pre移动到1,cur移动到3。
2.第二轮交换:
-
cur指向3,t指向4。
-
保存 t.next = None。
-
调整指针:1 -> 4 -> 3 -> None。
-
最终结果:2 -> 1 -> 4 -> 3。
通过修正指针操作顺序,确保每次交换后链表正确连接,避免环或断链。