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

2021-08-21 05:42:39 字數 789 閱讀 4918

本文首發於我的個人部落格:尾尾部落

題目描述

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

解題思路

經典的雙指標法。定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷向前走k-1步,第二個指標保持不動,從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷,由於兩個指標的距離保持在k-1,當第乙個指標到達鍊錶的尾節點時,第二個指標剛好指向倒數第k個節點。

關注要點

1. 煉表頭指標是否為空,若為空則直接返回回null

2. k是否為0,k為0也就是要查詢倒數第0個節點,由於計數一般是從1開始的,所有輸入0沒有實際意義,返回null

3. k是否超出鍊錶的長度,如果鍊錶的節點個數少於k,則在指標後移的過程中會出現next指向空指標的錯誤,所以程式中要加乙個判斷

參考**

public

class

solution

listnode pa = head;

listnode pb = head;

for(int i=0; i1; i++)

pa = pa.next;

while(pa.next != null)

return pb;

}}

當然,還有一種是用stack的方法,把鍊錶按順序壓入stack,然後直接取出stack的第k個節點。

《劍指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日...