[問題]鏈結串列的刪除

看板C_and_CPP (C/C++)作者 (香菇)時間16年前 (2009/07/20 18:50), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
假設我已經有一串鏈結串列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

07/20 19:10, , 1F
front->link = ptr->link; 才對吧....@_@"
07/20 19:10, 1F

07/20 19:11, , 2F
我是說free上面那行; 當current的下一個就是要被刪掉的
07/20 19:11, 2F

07/20 19:12, , 3F
node, 就把current的下一個, 指到再下一個去;
07/20 19:12, 3F

07/20 19:12, , 4F
well~~我覺得其實可以直接找data, 不用while兩次的....
07/20 19:12, 4F

07/20 19:12, , 5F
另外while迴圈最好做一個是不是找到底了的判斷....
07/20 19:12, 5F

07/20 19:13, , 6F
避免input要刪的data根本不在LinkedList裡面:)
07/20 19:13, 6F

07/20 20:18, , 7F
你點醒了我,謝謝你的回答
07/20 20:18, 7F
文章代碼(AID): #1AP4lQnT (C_and_CPP)
文章代碼(AID): #1AP4lQnT (C_and_CPP)