面試題 15 鍊錶中倒數第 k 個結點

2022-08-03 16:12:21 字數 1057 閱讀 5946

面試題 15:鍊錶中倒數第 k 個結點

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

最初思路:先遍歷鍊錶得到鍊錶總長度,然後length-k+1位置的結點就是所求結點。但是需要遍歷兩遍

改進:用兩個指標,兩個指標之間距離相差k-1;當第乙個指標都到鍊錶尾結點,那麼第二個指標就在倒數第k

注意程式的魯棒性:

鍊錶為空鍊錶,返回null;

k=0,返回空;

k大於鍊錶長度,返回null;

package

offer;

/*面試題 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...