每日一練(12) 鍊錶中倒數第k個節點

2022-09-19 13:39:09 字數 832 閱讀 2137

title: 每日一練(12):鍊錶中倒數第k個節點

categories:[劍指offer]

tags:[每日一練]

date: 2022/01/25

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。

例如,乙個鍊錶有 6 個節點,從頭節點開始,它們的值依次是 1、2、3、4、5、6。這個鍊錶的倒數第 3 個節點是值為 4 的節點。

示例:給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.

返回鍊錶 4->5.

具體過程如下:

實現細節:

listnode* getkthfromend(listnode* head, int k) 

if (k > n)

listnode *node = head;

for (int i = 0; i < n-k; i++)

return node;

}

快慢指標的思想。我們將第乙個指標 fast 指向鍊錶的第 k + 1 個節點,第二個指標 slow 指向鍊錶的第乙個節點,此時指標 fast 與 slow 二者之間剛好間隔 k 個節點。此時兩個指標同步向後走,當第乙個指標 fast 走到鍊錶的尾部空節點時,則此時 slow 指標剛好指向鍊錶的倒數第k個節點。

listnode* getkthfromend(listnode* head, int k) 

while (fast)

return slow; //返回此時slow指向倒數的第k個節點

}

12 鍊錶中倒數第k個結點

鍊錶中倒數第k個結點 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。設定兩個指標p1和p2,p1不斷向前走,當p1到鍊錶頭部的距離大於k時p2開始向前走,控制兩個指標的距離為k。include stdafx.h include using namespace std struct listnode cl...

12 鍊錶中倒數第k個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了能夠只遍歷一次就能找到倒數第k個節點,可以定義兩個指標 1 第乙個指標從鍊錶的頭指標開始遍歷向前走k 1,第二個指標保持不動 2 從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷 3 由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶...

LeeteCode 查詢鍊錶中倒數第k個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。鍊錶節點的定義 definition for singly linked list.public class ...