輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。
與leetcode上刪除倒數第k個節點類似,兩次遍歷的方法很簡單,這裡看一次遍歷的方法。
設定兩個指標p1,p2(開始都初始化為頭節點),p1走到第k個節點後,兩個指標一起向右走,當p1走到尾節點時,p1指向的節點即為倒數第k個節點。
class solution
p1 = p1->next;
}if(p1 == null) return plisthead;
p2 = p2->next;
while(p1->next != null)
return p2;}};
(1)煉表頭節點指標為空,返回null;
(2)k為0,返回null;
(3)鍊錶節點數小於k,返回null。(p1右移到第k個節點的過程判斷是不是指向null,是的話直接返回了。由於最後一次迴圈,p1指向了第k+1個節點,所以下面加了if判斷。另外,為了讓兩個指標保持距離k-1,p2先往右走了一步,兩個指標再一起走,下面的迴圈結束條件是p1到達尾節點,也即p1->next為null,這時p2指向倒數第k個節點。)
p1走k-1步,每次看要走過去的下乙個節點是否為空,這樣最後p1剛好走到第k個節點,且第k個節點不為空。
(while條件有時候判斷當前操作節點,有時候判斷當前節點的下乙個節點)
《劍指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日...