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

Python单行多变量赋值与逐行赋值的差异——链表反转案例解析

Python单行多变量赋值与逐行赋值的差异(反转链表案例)

先看你写的错误代码:

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        cur = head
        prev = None
        while cur:
            cur.next = prev
            prev = cur
            cur = cur.next
        return prev

再看可行的单行赋值版本:

class Solution:  
    def reverseList(self, head):
        cur = head 
        prev = None
        while cur:
            cur.next, prev, cur = prev, cur, cur.next
        return prev 

核心差异:赋值时机不同

  • 逐行赋值时,每一行的赋值会立即生效,直接修改变量当前值:

    1. cur.next = prev:把当前cur的next指向prev,此时cur原本的next已经被覆盖
    2. prev = cur:prev更新为当前cur
    3. cur = cur.next:这里的cur.next是第一步修改后的prev(第一次循环时就是None),所以cur直接变成None,循环终止,只反转了第一个节点,后续链表节点全部丢失。
  • 单行多变量赋值时,Python会先计算等号右侧所有表达式的结果并保存为临时值,再一次性赋值给左侧变量:

    1. 右侧先拿到三个值:当前的prev、当前的cur、修改前的原cur.next(也就是下一个要处理的节点)
    2. 再把这三个值分别赋值给cur.next、prev、cur
    3. 这样cur被赋值为原本的下一个节点,循环能继续处理后续链表节点,完成整个反转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:54:21