全部题目来自力扣,这里只做学习的记录,内容中部分为AI生成,有不对的地方可以评论或者私信哦~~
24. 两两交换链表中的节点
python
# 递归版本
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head is None or head.next is None:
return head
# 待翻转的两个node分别是pre和cur
pre = head
cur = head.next
next = head.next.next
cur.next = pre # 交换
pre.next = self.swapPairs(next) # 将以next为head的后续链表两两交换
return cur

代码执行示例
假设链表为:1 -> 2 -> 3 -> 4 -> None
执行过程:
- 第一次递归调用:
pre = 1
,cur = 2
,next = 3
- 交换
pre
和cur
:2 -> 1
- 递归处理
next = 3
,得到交换后的链表4 -> 3
- 将
pre.next
(即1.next
)指向4 -> 3
,最终链表为2 -> 1 -> 4 -> 3 -> None
- 返回
cur = 2
,即交换后的新链表头节点。
最终链表为:2 -> 1 -> 4 -> 3 -> None
python
# Definition for singly-linked list.
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
dummy_head = ListNode(next=head)
current = dummy_head
# 必须有cur的下一个和下下个才能交换,否则说明已经交换结束了
while current.next and current.next.next:
temp = current.next # 防止节点修改
temp1 = current.next.next.next
current.next = current.next.next
current.next.next = temp
temp.next = temp1
current = current.next.next
return dummy_head.next