看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 最近練習Linked list時總有個疑惑 我先宣告 typedef struct listnode *listnodePtr; typedef struct listnode { int num; listnodePtr nextPtr; }Listnode; 第一個節點假設由 listnodePtr first指著 書上在討論刪除節點時用的函數叫 void delete(*listnodePtr startPtr,char value) 事實上 不論插入或刪除 函數都會用到雙重指標 我不太懂為何如此 我寫出我的想法 請各位指出錯誤點 感謝 我想用單純一個的指標就好 如果要刪除第一個節點 可先在函數中宣告一個 listnodePtr temp 去記住要刪除的startPtr 再將startPtr指向下個節點 也就是 temp=startPtr 此時temp的內容 也就是他存的記憶體位置跟startPtr的內容一樣 然後 startPtr=startPtr->nextPtr 最後free(temp) 如此 就不需用到雙重指標 只需要將first傳進函數中就可以了吧? 也就是改寫成void delete(listnodePtr startPtr,char value) 新手發言 如有可笑之處 還請大家多多包涵 感謝 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.50.57.101
LPH66:問題: 這樣刪完之後原來的 first 會如何? 10/31 00:20
LPH66:知道以上問題的答案之後就會知道為什麼需要多一層指標了 10/31 00:21
抱歉可能我對C的掌握度還不夠 first不是會改為指向下一個node嗎?(如果只刪除第一個node) ※ 編輯: deangogi 來自: 123.50.57.101 (10/31 00:23)
LPH66:置底十三誡之十三去看看吧 雖然不是直接相關但觀念是相通的 10/31 00:31
cholid:delete(first, ...) first和startPtr會指向同一個地方嗎~? 10/31 19:02
cholid:是會指向同一個地方 但是first 不等於 startPtr 10/31 19:07
diabloevagto:原po需要的在複習一下link list的概念 10/31 20:35