單向鍊錶節點的刪除

2021-08-15 16:09:52 字數 1506 閱讀 8782

單向鍊錶的建立在這裡不在贅述,詳細請看另一篇文章《單向鍊錶的建立》。在本篇文章中,主要通過舉例的方式來幫大家理解單向鍊錶節點的刪除。

本篇文章中建立節點用如下表示

typdef struct node elemsn;
在鍊錶節點的刪除中,可以分為兩種情況

①刪除頭節點

pdel=head;//定義指標指向待刪節點

head=head->next;//挪動頭指標

free(pdel);//釋放待刪除指標完成刪除

pdel=null;//原指標指空

②刪除中間節點、尾節點

q->next=pdel->next;//q為待刪除節點的前驅節點指標,pdel為待刪除節點指標

free(pdel);

pdel=null;

刪除目標節點可概括為兩步:

查詢目標節點、刪除

例一:設head指向乙個非空單向鍊錶、其資料域的值不重複,在鍊錶中刪除關鍵字為key的節點

elemsn  *delkeynode(elemsn *head,int key)

return head;

}

例二:設資料域值不重複

①刪除鍊錶中最大值節點

elemsn *delmaxnode(elemsn *head)

else

head=head->next;

pmax->next=null;

free(pmax);

return head;

}

②將鍊錶中最大值節點移動到尾部

elemsn *movmaxnodetotail(elemsn *head)

else

head=head->next;

pmax->next=null;

p->next=pmax;

return head;

}

例三:設資料域值重複,刪除關鍵值為key的節點

elemsn *delkeynode(elemsn *head,int key)

else

else               

}return head;

}

例四::設head指向乙個非空單向鏈,資料域值重複,且公升序有序,刪除鍊錶中重複值的節點

void delnodes(elemsn *head)

else

}}

例五:設head指向乙個非空單向鍊錶,資料域的值重複且無序,刪除重複值節點

void delsamenodes(elemsn *head)

else

}pkey=pkey->next;

}}

單向鍊錶刪除節點

單向鍊錶刪除節點的乙個技巧,這個是在 程式設計之美 上面看到的,可以用來對付一些演算法題。有時候會遇到這種情況,單鏈表提供乙個指標,要求要刪除指標指向的節點。如下 考慮到釋放記憶體,還再需要乙個指標 我們具體一下,有這麼乙個單向鍊錶,這個鍊錶的節點比較簡單,資料域只有乙個整型 並且當前的指標 ite...

單向鍊錶刪除節點

include include include include 使用隨機數的標頭檔案 using namespace std class list list del ptr list head,list ptr int main srand unsigned time null 以時間為隨機數的種子...

單向鍊錶實現 插入節點 刪除節點操作

function node element 該類的功能包括插入刪除節點 在列表中查詢給定的值。function llist 插入新節點 向鍊錶中插入乙個節點,需要修改它前面的節點 前驅 使其指向新加入的節點,而新加入的節點則指向原來前驅指向的節點 find方法 遍歷鍊錶,查詢給定資料。如果找到資料,...