作者deangogi (5566 no7)
看板C_and_CPP
標題[問題] Linked list和雙重指標
時間Sun Oct 30 23:23:42 2011
開發平台(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