Programming 板


LINE

大家好,最近在實作linked list 最下面是程式的節錄 AddAtHead是想將node新增在linked list的開頭 在AddAtHead中的註解是compile會過答案正確的程式,它的下面三行是我有問題的部分 它們的錯誤輸出範例是如果我有一個linked list是2->7,想在前面加一個1的node 此時會變成1->7而不是1->2->7 印(obj->val,obj->next->val)和(tem->val,tem->next->val)出來都是(1,7) 我一開始想將obj指向linkedlist的頭所以用obj=tem; 我以為的錯誤會是obj和tem變成迴圈的linked list或是都變成1->2,結果是1->7,百思 不得其解 所以想問大家知道這個運算obj=tem;中發生了什麼事? 為什麼只要像註解一樣避開obj=tem;就可以? 謝謝大家 typedef struct linklist{ int val; struct linklist *next; } MyLinkedList; void AddAtHead(MyLinkedList* obj, int val) { MyLinkedList* tem = malloc(sizeof(MyLinkedList)); // tem->val=obj->val; // tem->next=obj->next; // obj->val=val; // obj->next=tem; tem->val=val; tem->next=obj; obj=tem; } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.9.131.1 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Programming/M.1736755011.A.775.html
1F:→ ssdoz2sk: 嗯,我覺得你需要畫圖幫助理解61.220.35.86 01/13 16:52
有畫過,但我的問題應該是不知道那行運算實際做了什麼?以及為什麼會輸出那樣? ※ 編輯: vhunter (101.9.131.1 臺灣), 01/13/2025 18:30:52
2F:推 gusion: 你註解做的事情實際上是把新建的node放在110.28.40.242 01/13 21:15
3F:→ gusion: 第二個,把值改成原本的頭,把原本頭的值110.28.40.242 01/13 21:15
4F:→ gusion: 改成新值。而你想直接加到開頭的話,就應110.28.40.242 01/13 21:15
5F:→ gusion: 該傳入pointer of pointer,把原本caller110.28.40.242 01/13 21:15
6F:→ gusion: 擁有的obj pointer改成新建的node。110.28.40.242 01/13 21:15
是,我註解這樣寫可以過,因為我需要obj最後指向第一元素,我也理解中間的過程。我 只是不知道沒有註解的部分錯在哪裡?和不了解中間的機制 ※ 編輯: vhunter (101.9.131.1 臺灣), 01/13/2025 21:27:02
7F:推 gusion: obj變數指到的是head node,function call110.28.40.242 01/13 21:27
8F:→ gusion: er也應該有一個pointer指到head node,這110.28.40.242 01/13 21:27
9F:→ gusion: 邊先假設叫headptr,而你在function中只能110.28.40.242 01/13 21:27
10F:→ gusion: 透過obj修改head node,無法影響到外面的h110.28.40.242 01/13 21:27
11F:→ gusion: eadptr,如果要修改headptr,就應該傳一個110.28.40.242 01/13 21:27
12F:→ gusion: 指到headptr的pointer,把headptr改成指向110.28.40.242 01/13 21:27
13F:→ 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
14F:→ lycantrope: 換成rust就是 mut obj:&mut Node 133.106.32.178 01/14 00:00
15F:推 gusion: 有比較完整的程式碼嗎?我拿你的function 1.169.110.73 01/14 00:36
16F:→ gusion: 測試,跑不出你的結果。 1.169.110.73 01/14 00:37
17F:→ gusion: https://onecompiler.com/c/435xysdfs 1.169.110.73 01/14 00:39
這是leetcode的題目,它的主程式沒有放出來,我也只是寫function出來而已,題 目是leetcode的707.Design Linked List 如果主程式我自己寫的話是這樣 https://onecompiler.com/c/435zq7nr9 結果和內文的錯誤一樣
18F:推 ssdoz2sk: 欸,我拿便利貼模擬一下應該不會這樣啊27.53.99.6 01/14 13:07
19F:→ 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
20F:推 gusion: 你的main funtion的obj變數一直都是指在71.169.110.73 01/14 19:44
21F:→ gusion: 的那個node,只是因為你是在add function1.169.110.73 01/14 19:44
22F:→ gusion: 中印list,所以才會好像有加進list的錯覺1.169.110.73 01/14 19:44
23F:→ gusion: ,實際上在main的obj看到的一直只有一個no1.169.110.73 01/14 19:44
24F:→ gusion: de,也就是一開始create的node。第一次加 1.169.110.73 01/14 19:44
25F:→ gusion: 入7會成功,是因為add function是把第一個1.169.110.73 01/14 19:44
26F:→ gusion: node的value改成7,後面的add對main來說是1.169.110.73 01/14 19:44
27F:→ 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







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP