輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。
這道題也很有趣,我們當然可以兩重遍歷鍊錶,第一次找到鍊錶的長度l,第二再根據鍊錶的長度l和k的差值計算出倒數第k個節點正向順序,從而得到所求的結點。但是有沒有更簡單或者代價更小得方法?
用兩個指標,用差值的方法來求倒數第k個個節點
開闢兩個指標,使得兩個指標之間相隔k個節點。(第乙個節點指向第k+1個節點,第二個節點指向頭結點)那麼當第乙個指標指向倒數第1個節點的next(空指標)時,第二個指標指向倒數第k+1個節點的next(倒數第k個節點)。
注意:本問題會產生兩種情況:1、kl,返回空指標。
/*
struct listnode
};*/
class solution
int len=0;
listnode *p = plisthead;
listnode *q = plisthead;
for(int i=0;p!=null;i++,len++)
p=p->next;
}if(k>len) return null;
return q;
}};
劍指offer 鍊錶中倒數第k個結點(鍊錶)
輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。分析 兩個指標pointresult和pointend一起指向頭結點,然後根據k,移動pointend,使pointresult和pointend的距離為k 1。然後同時移動pointresult和pointend,當pointend指向最後乙個結點時,po...
《劍指offer》 鍊錶中倒數第k個結點
題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點.這種考題是比較簡單的一種,以前也碰到過類似的題目,從耗時來說,一般都是使用兩個指標,一前一後的走,中間間隔k或者k 1個步長,這個視判斷語句而定。當前乙個指標走到末端時,後乙個指標正好落在倒數第k個節點處,直接返回該節點。code public c...
劍指offer 鍊錶中倒數第K個結點
輸入乙個鍊錶,輸出該鍊錶中倒數第k 個結點。從 1開始計數,即該鍊錶的尾節點是倒數第乙個結點。思路 一 鍊錶是單向鍊錶,只能從頭結點往後依次遍歷,倒數第k 個結點,也就是從頭結點開始的 n k 1 個結點。但是需要先遍歷一遍得到鍊錶長度,然後在找第 n k 1的k 結點。二 1 方法一需要對鍊錶進行...