作者yulin0619 (爱在雨过天晴时)
看板Python
标题[问题] 关於linked list
时间Thu Jan 2 04:11:24 2020
小弟在自学用python练习写linked list
还很菜 但身边没朋友 所以上来问
先附上我的程式码
https://i.imgur.com/LedXkL0.jpg
这是leetcode的题目(206-reverse linked list)
因为不熟悉python资料结构的实作方式
所以模仿了一下网路上大神的一个做法
这是一题要反转linked list的题目
最下方while回圈就是在做reverse
想问一下 为什麽上方图片执行後会有如下Error ?
https://i.imgur.com/wPC5afA.jpg
而如果把最下面while回圈内的那一行,改成注解的那一行,
也就是说把while回圈内的statement
从原本
dummy.next, head, head.next = head, head.next, dummy.next
改成
dummy.next, head.next, head = head, dummy.next, head.next
请问为什麽就能正常执行呢?
https://i.imgur.com/TlO4dmh.jpg
这是编译器发现什麽错误呢?
感谢众大神~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.43.57.36 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1577909487.A.ADD.html
再多问一个很基本,但我却不知道的事
下面这一个statement
a, b, c = 3, 4, 5
想请问编译器作的顺序是由右至左先做a = 3,然後b = 4,再来c = 5?
还是三个是不分顺序同时赋值的呢?
似乎是不分顺序同时赋值?
https://i.imgur.com/1cH8O1O.jpg
如果是不分顺序,那麽为什麽原文我说的问题会错呢QQ? (想了甚久...
※ 编辑: yulin0619 (114.43.57.36 台湾), 01/02/2020 04:18:57
※ 编辑: yulin0619 (114.43.57.36 台湾), 01/02/2020 04:26:29
1F:推 b04605067: 是顺序的问题吧,第一行的话 head 如果先指到最後的nex 01/02 06:07
2F:→ b04605067: t就变成none了 然後你又call了 head.next 所以它会跟你 01/02 06:07
3F:→ b04605067: 说none没有next这个attribute 01/02 06:08
你的留言再加上下方大大的留言,我就豁然开朗了~~
4F:推 ddavid: 原Po你以为a, b, c = c, a, b会解读成a = c b = a c = b 01/02 06:27
5F:→ ddavid: 同时做吧,不过这是错的 01/02 06:27
6F:→ ddavid: 真实情况是右边先做,先把c, a, b的值依序拿出来,然後做 01/02 06:27
7F:→ ddavid: 成一个Tuple,再把这个Tuple的值一一对应「依序」喂给abc 01/02 06:28
原来python在执行这个statement时,他的操作是这样做的
8F:→ ddavid: 因为会先把右边所有值都拿出来了之後才是赋值,所以不会因 01/02 06:29
9F:→ ddavid: 为连锁导致a, b, c通通变成c一开始的值 01/02 06:29
10F:→ ddavid: 也就是说赋值还是有顺序的,因此你原问题一开始那个顺序就 01/02 06:30
11F:→ ddavid: 会最後发生先head = None才打算head.next = xxx而出错 01/02 06:31
那这样我清楚明白了 谢谢你们
※ 编辑: yulin0619 (114.43.57.36 台湾), 01/02/2020 14:29:38