給定鏈表中間節(jié)點指針,刪除中間節(jié)點的方法
更新時間:2013年11月14日 10:17:56 作者:
本文實現算法來刪除單鏈表中的中間節(jié)點,只知道指向該節(jié)點中間節(jié)點的指針,大家可以參考使用
問題如下
輸入:鏈表 a->b->c->d->e中指向節(jié)點c的指針
輸出:無返回值,但新鏈表變?yōu)閍->b->d->e
解答:
想了好久沒想出來,看了提示才知道解法的。這里用到了一個小技巧。要刪除中間節(jié)點,但是我們不知道要刪除節(jié)點的上一個節(jié)點p,所以無法通過修改指針的方法(p->next=del->next)來刪除節(jié)點,但知道要刪除節(jié)點的后一個節(jié)點,那么我們換一個思路,把要刪除的節(jié)點的數據與該節(jié)點的后一個節(jié)點的數據交換,然后刪除后一個節(jié)點,從而達到目的。但是該方法不能刪除最后一個節(jié)點,原因顯而易見。
// a tricky solution,can't delete the last one element
int delete_node(NODE* node) {
int data;
NODE *p=node->next;
node->data=p->data;
node->next=p->next;
free(p);
}
輸入:鏈表 a->b->c->d->e中指向節(jié)點c的指針
輸出:無返回值,但新鏈表變?yōu)閍->b->d->e
解答:
想了好久沒想出來,看了提示才知道解法的。這里用到了一個小技巧。要刪除中間節(jié)點,但是我們不知道要刪除節(jié)點的上一個節(jié)點p,所以無法通過修改指針的方法(p->next=del->next)來刪除節(jié)點,但知道要刪除節(jié)點的后一個節(jié)點,那么我們換一個思路,把要刪除的節(jié)點的數據與該節(jié)點的后一個節(jié)點的數據交換,然后刪除后一個節(jié)點,從而達到目的。但是該方法不能刪除最后一個節(jié)點,原因顯而易見。
復制代碼 代碼如下:
// a tricky solution,can't delete the last one element
int delete_node(NODE* node) {
int data;
NODE *p=node->next;
node->data=p->data;
node->next=p->next;
free(p);
}

