C++實(shí)現(xiàn)單鏈表刪除倒數(shù)第k個節(jié)點(diǎn)的方法
本文實(shí)例講述了C++實(shí)現(xiàn)單鏈表刪除倒數(shù)第k個節(jié)點(diǎn)的方法。分享給大家供大家參考,具體如下:
題目:
刪除單鏈表中倒數(shù)第k個節(jié)點(diǎn)
解題思路及算法代碼:
標(biāo)尺法,定義兩個指針指向鏈表頭結(jié)點(diǎn),先讓一個走k步,然后兩個指針同時開始走,當(dāng)先走的指針走到末尾時,后走的指針指向的結(jié)點(diǎn)就是需要刪除的結(jié)點(diǎn)。
單鏈表結(jié)構(gòu)定義:
typedef struct Node { int data; struct Node* next; }node, *pLinkedList;
刪除倒數(shù)第K結(jié)點(diǎn)操作代碼:
//head表示頭結(jié)點(diǎn) Node* removeLastKthNode(pLinkedList head, int k) { if (NULL == head->next || k < 1) return head; pLinkedList cur = head; //1號指針 pLinkedList ret = head; //2號指針,指向待刪除節(jié)點(diǎn) pLinkedList pre = NULL; //pdel待刪除節(jié)點(diǎn)的前一個節(jié)點(diǎn) /* head 1 2 3 4 5 cur ret */ while (k > 0 && cur != NULL) { k--; cur = cur->next; } //當(dāng)鏈表走到終點(diǎn)時,k仍然大于0,可知k值大于鏈表長度 if (k > 0 && cur == NULL) { cout << "k值大于鏈表長度" << endl; return head; } //k == 0時,1號指針和2號指針同時走,ret即為待刪除的節(jié)點(diǎn) if (k == 0) { while (cur != NULL) { pre = ret; cur = cur->next; ret = ret->next; } /*k = 2時 head 1 2 3 4 5 NULL pre ret cur 即要求刪除ret節(jié)點(diǎn) */ pre->next = ret->next; free(ret); ret = NULL; return head; } }
希望本文所述對大家C++程序設(shè)計(jì)有所幫助。
相關(guān)文章
C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解
這篇文章主要介紹了C++ 實(shí)現(xiàn)漢諾塔的實(shí)例詳解的相關(guān)資料,這里主要說明C++中數(shù)據(jù)結(jié)構(gòu)的遞歸的應(yīng)用,需要的朋友可以參考下2017-08-08C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表去重的實(shí)例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)鏈表去重的實(shí)例的相關(guān)資料,這里提供了題目及實(shí)例代碼,需要的朋友可以參考下2017-07-07C語言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08C語言超詳細(xì)講解數(shù)據(jù)結(jié)構(gòu)中雙向帶頭循環(huán)鏈表
帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會發(fā)現(xiàn)結(jié)構(gòu)會帶來很多優(yōu)勢,實(shí)現(xiàn)反而簡單2022-04-04