作者:
yulin0619 (來自中國北方的一隻鵝)
2020-01-02 04:11:24小弟在自學用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
這是編譯器發現什麼錯誤呢?
感謝眾大神~
作者: b04605067 (huang bama) 2020-01-02 06:07:00
是順序的問題吧,第一行的話 head 如果先指到最後的next就變成none了 然後你又call了 head.next 所以它會跟你說none沒有next這個attribute
作者:
ddavid (謊言接線生)
2020-01-02 06:27:00原Po你以為a, b, c = c, a, b會解讀成a = c b = a c = b同時做吧,不過這是錯的真實情況是右邊先做,先把c, a, b的值依序拿出來,然後做成一個Tuple,再把這個Tuple的值一一對應「依序」餵給abc因為會先把右邊所有值都拿出來了之後才是賦值,所以不會因為連鎖導致a, b, c通通變成c一開始的值也就是說賦值還是有順序的,因此你原問題一開始那個順序就會最後發生先head = None才打算head.next = xxx而出錯