面試題 15:鍊錶中倒數第 k 個結點
題目:輸入乙個鍊錶,輸出該鍊錶中倒數第 k 個結點。為了符合大多數人的習慣, 本題從 1 開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個有 6 個結點的 鍊錶,從頭結點依次是 1,2,3,4,5,6。倒數第三個結點就是值為 4 的結點。
最初思路:先遍歷鍊錶得到鍊錶總長度,然後length-k+1位置的結點就是所求結點。但是需要遍歷兩遍
改進:用兩個指標,兩個指標之間距離相差k-1;當第乙個指標都到鍊錶尾結點,那麼第二個指標就在倒數第k
注意程式的魯棒性:
鍊錶為空鍊錶,返回null;
k=0,返回空;
k大於鍊錶長度,返回null;
packageoffer;
/*面試題 15:鍊錶中倒數第 k 個結點
題目:輸入乙個鍊錶,輸出該鍊錶中倒數第 k 個結點。為了符合大多數人的習慣, 本題從 1 開始計數,即鍊錶的尾結點是倒數第乙個結點。
例如乙個有 6 個結點的 鍊錶,從頭結點依次是 1,2,3,4,5,6。倒數第三個結點就是值為 4 的結點。
*/public
class
problem15
public listnode getnode(listnode head,int
k) listnode temp =head;
for(int i=0; i)
listnode result =head;
while(temp!=null
)
return
result;
}}
同類題目:
1:求鍊錶的中間結點。如果鍊錶中結點總數為奇數,返回中間結點;如果結點總數為偶數,返回中間兩個結點任意乙個結點。
--同樣嗎,可以定義兩個指標,同時從煉表頭結點出發,乙個指標一次走一步,另乙個指標一次走兩步,當走的快的結點到達末尾,
慢點的結點剛好在中間。
2:判斷乙個單鏈表是否形成了環形結構。兩個指標同上,如果快指標追上了慢指標,則是環形結構,否則不是。(走到了鍊錶的末尾)
面試題15 鍊錶中倒數第K個結點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。鍊錶的節點定義如下,這裡使用的是c 來定義 public cla...
面試題15 鍊錶中倒數第k個結點
為了實現只遍歷鍊錶一次就能找到倒數第k 個結點,我們可以定義兩 個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1步,第二個指標保持不動 從第k 步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1 當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二個指標 走在後面的 指...
面試題15 鍊錶中倒數第K個結點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。看到這道題目,最直觀的想法,就是先算出鍊錶的長度n,然後倒數第k...