→ ssdoz2sk: 嗯,我覺得你需要畫圖幫助理解61.220.35.86 01/13 16:52
有畫過,但我的問題應該是不知道那行運算實際做了什麼?以及為什麼會輸出那樣?
※ 編輯: vhunter (101.9.131.1 臺灣), 01/13/2025 18:30:52
推 gusion: 你註解做的事情實際上是把新建的node放在110.28.40.242 01/13 21:15
→ gusion: 第二個,把值改成原本的頭,把原本頭的值110.28.40.242 01/13 21:15
→ gusion: 改成新值。而你想直接加到開頭的話,就應110.28.40.242 01/13 21:15
→ gusion: 該傳入pointer of pointer,把原本caller110.28.40.242 01/13 21:15
→ gusion: 擁有的obj pointer改成新建的node。110.28.40.242 01/13 21:15
是,我註解這樣寫可以過,因為我需要obj最後指向第一元素,我也理解中間的過程。我
只是不知道沒有註解的部分錯在哪裡?和不了解中間的機制
※ 編輯: vhunter (101.9.131.1 臺灣), 01/13/2025 21:27:02
推 gusion: obj變數指到的是head node,function call110.28.40.242 01/13 21:27
→ gusion: er也應該有一個pointer指到head node,這110.28.40.242 01/13 21:27
→ gusion: 邊先假設叫headptr,而你在function中只能110.28.40.242 01/13 21:27
→ gusion: 透過obj修改head node,無法影響到外面的h110.28.40.242 01/13 21:27
→ gusion: eadptr,如果要修改headptr,就應該傳一個110.28.40.242 01/13 21:27
→ gusion: 指到headptr的pointer,把headptr改成指向110.28.40.242 01/13 21:27
→ gusion: tem。110.28.40.242 01/13 21:27
應該不是,沒有註解的部分我在leetcode練習上編譯之後是正確的,中間我有印出來看也
是對的。因為傳遞的是指標結構,我想應該是call by address ,在function中的修改應
該會直接反應在global。問題感覺不在這裡?
※ 編輯: vhunter (101.9.131.1 臺灣), 01/13/2025 23:28:40
→ lycantrope: 換成rust就是 mut obj:&mut Node 133.106.32.178 01/14 00:00
推 gusion: 有比較完整的程式碼嗎?我拿你的function 1.169.110.73 01/14 00:36
→ gusion: 測試,跑不出你的結果。 1.169.110.73 01/14 00:37
這是leetcode的題目,它的主程式沒有放出來,我也只是寫function出來而已,題
目是leetcode的707.Design Linked List
如果主程式我自己寫的話是這樣
https://onecompiler.com/c/435zq7nr9
結果和內文的錯誤一樣
推 ssdoz2sk: 欸,我拿便利貼模擬一下應該不會這樣啊27.53.99.6 01/14 13:07
→ ssdoz2sk: ,7 的item 也沒被重新分配,奇怪了 27.53.99.6 01/14 13:07
不知道,我也覺得很奇怪QQ
※ 編輯: vhunter (101.9.131.1 臺灣), 01/14/2025 14:02:50
※ 編輯: vhunter (101.9.131.1 臺灣), 01/14/2025 14:26:14
※ 編輯: vhunter (101.9.131.1 臺灣), 01/14/2025 14:31:32
※ 編輯: vhunter (101.9.131.1 臺灣), 01/14/2025 14:35:03
推 gusion: 你的main funtion的obj變數一直都是指在71.169.110.73 01/14 19:44
→ gusion: 的那個node,只是因為你是在add function1.169.110.73 01/14 19:44
→ gusion: 中印list,所以才會好像有加進list的錯覺1.169.110.73 01/14 19:44
→ gusion: ,實際上在main的obj看到的一直只有一個no1.169.110.73 01/14 19:44
→ gusion: de,也就是一開始create的node。第一次加 1.169.110.73 01/14 19:44
→ gusion: 入7會成功,是因為add function是把第一個1.169.110.73 01/14 19:44
→ gusion: node的value改成7,後面的add對main來說是1.169.110.73 01/14 19:44
→ gusion: 無作用的 1.169.110.73 01/14 19:44
我試過幾次之後發現tem
MyLinkedList* tem = (MyLinkedList* )malloc(sizeof(MyLinkedList));
改成
MyLinkedList* tem;
這樣就好的話就可以正常移動指標,因為我只需要一個指向node的指標就好而不是需要一個node
如果需要新增node則是不能移動obj,所以leetcode上很多答案都是obj指向next是第一元素head,而不是讓obj直接當head
應該是這樣,感謝大家的回答!!
※ 編輯: vhunter (101.9.131.1 臺灣), 01/15/2025 00:32:59