作者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://www.ptt.cc/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
推 b04605067: 是順序的問題吧,第一行的話 head 如果先指到最後的nex 01/02 06:07
→ b04605067: t就變成none了 然後你又call了 head.next 所以它會跟你 01/02 06:07
→ b04605067: 說none沒有next這個attribute 01/02 06:08
你的留言再加上下方大大的留言,我就豁然開朗了~~
推 ddavid: 原Po你以為a, b, c = c, a, b會解讀成a = c b = a c = b 01/02 06:27
→ ddavid: 同時做吧,不過這是錯的 01/02 06:27
→ ddavid: 真實情況是右邊先做,先把c, a, b的值依序拿出來,然後做 01/02 06:27
→ ddavid: 成一個Tuple,再把這個Tuple的值一一對應「依序」餵給abc 01/02 06:28
原來python在執行這個statement時,他的操作是這樣做的
→ ddavid: 因為會先把右邊所有值都拿出來了之後才是賦值,所以不會因 01/02 06:29
→ ddavid: 為連鎖導致a, b, c通通變成c一開始的值 01/02 06:29
→ ddavid: 也就是說賦值還是有順序的,因此你原問題一開始那個順序就 01/02 06:30
→ ddavid: 會最後發生先head = None才打算head.next = xxx而出錯 01/02 06:31
那這樣我清楚明白了 謝謝你們
※ 編輯: yulin0619 (114.43.57.36 臺灣), 01/02/2020 14:29:38