链表逆序遇到的python赋值问题

本文探讨了Python中链表逆序实现时遇到的赋值顺序问题,通过具体示例解释了Python赋值操作的规则,并给出了正确的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开篇废话

今天回刷了一道入门的链表逆序题。Python实现的很简单一句就够了。但是写的实在是很随意,pre, cur, cur.next = cur, cur.next, pre这个赋值其实是有问题的。一直觉得Python的赋值真的很优雅所以压根没考虑什么赋值顺序的问题。所以结果怎么都不对。提示我cur.next == None。后来仔细琢磨下其实很简单。简单总结下赋值规则。

  • Python赋值=等号优先级最低,所以如果等式右边有表达式的话,会先计算右边的表达式。
  • 之后计算完毕,等式右边就当做值而存在,从等式右边的第一个向等式左边的第一个变量开始赋值。并且注意,如果左边的变量,又是等式右边第二个需要赋值的变量,它也是不会变化的。上面说了,右边只有以值而存在的。简单演示如下:
>> a, b, c = 1, 2, 3
>> a, b, c = b, a, b
>> a, b, c
>> 2, 1, 2

回到这道链表逆序上来,其实仔细核对一下发现一下其实是赋值顺序问题导致的。
按照pre, cur, cur.next = cur, cur.next, pre这个写法,假如链表结点值是[1,2,3,4,5]按照上面这个语句赋值结果pre:List:Node{1, ListNode{2, None}} cur:ListNode{2, None} cur.next:None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        cur, pre = head, None
        while cur:
            p, cur, cur.next = cur, cur.next, p # 错误代码
            cur.next, cur, pre = pre, cur.next, cur # 正确代码
        return pre

所以顺序还是很重要的~最后在强调一下Python真他妈的优雅!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值