給定鏈表中間節(jié)點指針,刪除中間節(jié)點的方法
更新時間:2013年11月14日 10:17:56 作者:
本文實現(xiàn)算法來刪除單鏈表中的中間節(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é)點的數(shù)據(jù)與該節(jié)點的后一個節(jié)點的數(shù)據(jù)交換,然后刪除后一個節(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é)點的數(shù)據(jù)與該節(jié)點的后一個節(jié)點的數(shù)據(jù)交換,然后刪除后一個節(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);
}
相關文章
Shell腳本實現(xiàn)硬盤空間和表空間的使用情況統(tǒng)計并郵件通知
這篇文章主要介紹了Shell腳本實現(xiàn)硬盤空間和表空間的使用情況統(tǒng)計并郵件通知,其中表空間是指oracle數(shù)據(jù)庫里的表空間,需要的朋友可以參考下2014-12-12如何使用 Shell 腳本執(zhí)行 .NET Core 應用
這篇文章主要介紹了如何使用 Shell 腳本執(zhí)行 .NET Core 應用,幫助大家更好的理解和使用shell 腳本,感興趣的朋友可以了解下2020-09-09linux中文件的三種time(atime,mtime,ctime)的用法
linux下文件有3個時間的,分別是atime,mtime,ctime,有些小伙伴對這3個時間還是比較迷茫和困惑的,所以小編為大家整理了下,希望對大家有所幫助2023-08-08