《劍指offer》 鍊錶中倒數第k個節點

2022-03-13 18:52:10 字數 1270 閱讀 5125

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。

這應該是最直觀的方法:

遞迴到鍊錶結束,回溯到時候開始計數,直到k === 0時,取當前的head節點。

**

/**

* @param head

* @param k

* @return

*/var getkthfromend = function(head, k)

helper(head.next)

if (--k === 0)

}let res = null

helper(head)

return res

};

遍歷拿到鍊錶的長度 \(n\),倒數第 \(k\) 個節點就是第 \(n - k\) 個節點。

**

/**

* @param head

* @param k

* @return

*/var getkthfromend = function(head, k)

let fast = head.next

let count = 0

while (fast && fast.next)

return fast ? 2 * count : 2 * count + 1

}const n = getlistlength(head)

for (let i = n - k; i > 0; i--)

return head

};

設定快慢指標,其中fast先走 \(k\) 步,然後slowfast一起走,直到fast為空時,slow就走了 \(n - k\) 步,此時slow指向倒數第 \(k\) 個節點。

/**

* @param head

* @param k

* @return

*/var getkthfromend = function(head, k)

while (fast)

return slow

};

《劍指offer》 鍊錶中倒數第k個結點

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點.這種考題是比較簡單的一種,以前也碰到過類似的題目,從耗時來說,一般都是使用兩個指標,一前一後的走,中間間隔k或者k 1個步長,這個視判斷語句而定。當前乙個指標走到末端時,後乙個指標正好落在倒數第k個節點處,直接返回該節點。code public c...

劍指offer 鍊錶中倒數第K個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k 個結點。從 1開始計數,即該鍊錶的尾節點是倒數第乙個結點。思路 一 鍊錶是單向鍊錶,只能從頭結點往後依次遍歷,倒數第k 個結點,也就是從頭結點開始的 n k 1 個結點。但是需要先遍歷一遍得到鍊錶長度,然後在找第 n k 1的k 結點。二 1 方法一需要對鍊錶進行...

劍指Offer 鍊錶中倒數第k個結點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。分析 兩個指標,先讓第乙個指標和第二個指標都指向頭結點,然後再讓第一指標走 k 1 步,即到達第k個結點。然後兩個指標同時開始向後移動,當第乙個指標到達最後的結點時候,第二個結點所在位置就是倒數第k個結點了。author zy date 2017年10月3日...