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 ...