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
核心差异:赋值时机不同
逐行赋值时,每一行的赋值会立即生效,直接修改变量当前值:
cur.next = prev:把当前cur的next指向prev,此时cur原本的next已经被覆盖prev = cur:prev更新为当前curcur = cur.next:这里的cur.next是第一步修改后的prev(第一次循环时就是None),所以cur直接变成None,循环终止,只反转了第一个节点,后续链表节点全部丢失。
单行多变量赋值时,Python会先计算等号右侧所有表达式的结果并保存为临时值,再一次性赋值给左侧变量:
- 右侧先拿到三个值:当前的
prev、当前的cur、修改前的原cur.next(也就是下一个要处理的节点) - 再把这三个值分别赋值给
cur.next、prev、cur - 这样cur被赋值为原本的下一个节点,循环能继续处理后续链表节点,完成整个反转。
- 右侧先拿到三个值:当前的
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

