You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链表成对交换节点代码疑问:交换步骤如何避免丢失后续链表?

链表成对交换节点的步骤疑惑解答

我正在解决链表成对交换节点(swap node in pairs)问题,已得到正确代码,但对交换步骤存在疑惑。代码如下:

def swapPairs(head):
    pre = ListNode(0)
    pre.next = head

    while pre.next and pre.next.next:
        a = pre.next
        b = a.next
        pre.next, b.next, a.next = b, a, b.next
        pre = a

    return pre.next

以链表1->2->3->4为例,初始时a指向1、b指向2,疑惑交换步骤中,b.next先指向a,为何不会丢失2之后的链表?


这核心原因是Python的元组解包是先计算所有右侧表达式的值,再一次性赋值给左侧变量,不是按顺序逐个执行赋值操作。

拿你举的1->2->3->4例子来说,执行pre.next, b.next, a.next = b, a, b.next这行代码时:

  • 第一步先把右侧三个值全部计算出来:b是节点2,a是节点1,b.next此时还是节点3(因为这一步只是读取值,还没修改b.next)
  • 第二步才把这三个预计算好的值依次赋值给左侧变量:
    • pre.next 赋值为节点2(让哑节点的下一个节点变成交换后的第一个节点)
    • b.next 赋值为节点1(让节点2指向节点1)
    • a.next 赋值为节点3(让节点1指向原来节点2的后续节点3)

整个过程中,节点2原本的后续节点3在赋值操作开始前就已经被读取并保存了,所以就算之后修改b.next指向a,也不会丢失后续的链表部分。

内容的提问来源于stack exchange,提问作者Taelung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 15:49:52