刪除鍊錶中倒數第K個節點,

2021-07-13 18:48:46 字數 950 閱讀 8062

題目:輸入乙個鍊錶,輸出該鍊錶的倒數第k個節點。為了符合大多數的習慣,最後乙個節點從1開始計數,即鍊錶的尾部節點為倒數第乙個節點。

鍊錶定義如下:

struct listnode;

listnode* createlistnode(int value)

void connectlistnodes(listnode* pcurrent, listnode* pnext)

pcurrent->m_pnext = pnext;

}void printlistnode(listnode* pnode)

else

}void printlist(listnode* phead)

printf("\nprintlist ends.\n");

}void destroylist(listnode* phead)

}listnode * findkthtotail(listnode* plisthead,unsigned int k)

pfirst=pfirst->m_pnext;

i++;

} if(i==k) pk=plisthead;

return pk;

}// //********************測試**********************

// 測試要找的結點在鍊錶中間

void test1()

// 測試要找的結點是鍊錶的尾結點

void test2()

// 測試要找的結點是鍊錶的頭結點

void test3()

// 測試空鍊錶

void test4()

// 測試輸入的第二個引數大於鍊錶的結點總數

void test5()

// 測試輸入的第二個引數為0

void test6()

int main(int argc, char* argv)

刪除鍊錶中倒數第K個節點

這裡演算法的思路很簡單,就是利用雙指標進行定位,筆記主要記錄的是c 的一些基礎知識,也就是關於指標傳遞的一些知識。bool deletelistnode int k,list list 傳入的是鍊錶指標的引用,也就是直接操作實參鍊錶,好處是當需要刪除首指標時,可以將鍊錶的head向next賦值即可,...

鍊錶中刪除倒數第K個節點

分別實現兩個函式,乙個可以刪除單鏈表中倒數第k個節點,另乙個可以刪除雙鏈表中倒數第k個節點。從問題當中,我們只能得到乙個鍊錶和要刪除的第k個節點的資訊,於是就有以下思路 如果鍊錶為空或者k 0時,直接返回 如若不然,遍歷鍊錶的每個節點,每經過乙個節點k減1。比如對於1 2 3 4該鍊錶的過程如下 k...

在鍊錶中刪除倒數第K個節點

給出乙個單鏈表,返回刪除單鏈表的倒數第 k 個節點的鍊錶。輸入描述 n 表示鍊錶的長度。val 表示鍊錶中節點的值。輸出描述 在給定的函式內返回鍊錶的頭指標。示例1輸入5 4 1 2 3 4 5輸出1 3 4 5備註 1 k n 1 06 1 leq k leq n leq 10 6 1 k n 1...