作者dpqb10 (香菇)
看板C_and_CPP
標題[問題]鏈結串列的刪除
時間Mon Jul 20 18:50:01 2009
假設我已經有一串鏈結串列front,要刪除某個值m(這個值是在串列裡頭的)
ptt=front; ==>因為等下front會改變指的地方,所以在用個ptt指最前面
if(front->data==m){
front=front->link; ===>這是當刪除第一個節點的情形
}
else{ ===>非第一個節點的情形
while(ptr->data!=m)===>宣告一個ptr用來先指出要刪除節點的值
{
ptr=ptr->link;}
while(front->link!=ptr)
{
front=front->link;}
front=ptr->link;
free(ptr);
}
然後在去執行這段,要輸出目前的串列結果
while(ptt!=NULL){
cout<<ptt->data;
cout<<endl;
ptt=ptt->link;
}
system("PAUSE");
return EXIT_SUCCESS;
}
結果,假設我原本的鏈結串列是1,2,3,4,5
然後刪掉3之後,結果會跑出1,2,0,3,4,5
為什麼會多個0呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.62.190.208
1F:推 VictorTom:front->link = ptr->link; 才對吧....@_@" 07/20 19:10
2F:→ VictorTom:我是說free上面那行; 當current的下一個就是要被刪掉的 07/20 19:11
3F:→ VictorTom:node, 就把current的下一個, 指到再下一個去; 07/20 19:12
4F:→ VictorTom:well~~我覺得其實可以直接找data, 不用while兩次的.... 07/20 19:12
5F:→ VictorTom:另外while迴圈最好做一個是不是找到底了的判斷.... 07/20 19:12
6F:→ VictorTom:避免input要刪的data根本不在LinkedList裡面:) 07/20 19:13
7F:→ dpqb10:你點醒了我,謝謝你的回答 07/20 20:18