[問題] 單向串列刪除節點

看板C_and_CPP作者 (集氣… )時間14年前 (2010/01/25 00:15), 編輯推噓3(304)
留言7則, 5人參與, 最新討論串1/1
遇到的問題: 用串列(Linked list)的方式寫出下列三筆資料 name number math 王小平 10 60 陳小美 13 70 張小明 20 40 現在想刪除輸入學號的那筆資料 void del(node *p) { int x ; //x為輸入的學號 cin >> x ; while((p!=NULL && (p->number!=x)) p = p->next ; . . . } 這樣可以找到對應學號的節點 但是問題是該如何把該節點刪掉呢? VC++ 感謝~ -- t a ◢█◤ ═══╮ ╭ theanswer3 h n █▌ ● ╰═══════════════════╯ S e s █▌ ◣ ◢█◣ ◢█◣ ◢█◣ ◢█◣ ◢ ◢ ◣ █◣ ρ w █▌ ◢ █ ███ █▌ █◢◤ █▌ █◢█ █ ██ Λ5 e ◢███◤ ◥ ◥▌◤ ◥█◤ ◥█◤ ◥█◤ ◥◤◥ ◥ ▌◤ r 3╰═══════════════════════════ #55 ▅▇▇▆ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.126.97.44 ※ 編輯: sak1346 來自: 120.126.97.44 (01/25 00:15)

01/25 00:16, , 1F
把該節點指標記錄下來, 把它的前一個的next指到它的後一
01/25 00:16, 1F

01/25 00:16, , 2F
個; 然後把記錄著要刪的節點free / delete掉就行了@_@"
01/25 00:16, 2F

01/25 00:18, , 3F
要怎麼找到該節點的的前一個呢?
01/25 00:18, 3F

01/25 00:23, , 4F
多一個指標 p_back = p 在while第1行... 最直覺的想法
01/25 00:23, 4F

01/25 00:39, , 5F
記前一個是對的, 但記得要處理 "要砍的就是第一個" 的 case
01/25 00:39, 5F

01/25 00:45, , 6F
謝謝提醒!
01/25 00:45, 6F

01/25 02:13, , 7F
建議你可以在最前面加上dummy node這樣所有case都一樣
01/25 02:13, 7F
文章代碼(AID): #1BN785yM (C_and_CPP)