(劍指Offer)面試題15 鍊錶中倒數第k個結點

2021-09-07 01:13:47 字數 936 閱讀 3235

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

例如:鍊錶中有6個結點,從頭到尾依次為1,2,3,4,5,6,則該鍊錶的倒數第3個結點為4.

鍊錶結點定義:

struct listnode;

1、遍歷整個鍊錶,計算結點的個數,再遍歷鍊錶,找到第n-k+1個結點;

2、通過兩個指標,第乙個指標先走k-1步,到達第k個結點,第二個指標指向頭結點,然後兩個指標同時走,每次走一步,當第乙個指標走到鏈尾時,第二個指標恰好走到倒數第k個結點。

注意細節:鍊錶為空,k大於鍊錶長度或者小於1等情況。

類似問題:

a. 求鍊錶的中間結點,如果鍊錶中結點數為奇數,則返回中間結點;如果為偶數,則返回中間結點的任意乙個。

(思路:兩個指標,同時從頭結點出發,乙個走一步,乙個走兩步,走得快的指標到達鏈尾時,走得慢的指標正好在鍊錶中間)

b. 判斷乙個單向鍊錶是否構成環形結構。

(思路:同上,兩個指標,一快一慢,如果快指標追上了慢指標,則鍊錶成環;如果快指標走到了鏈尾,則不成環)

struct listnode;

listnode* findkthtotail(listnode* plisthead, unsigned int k)

listnode *pbehind=plisthead;

while(pahead->next!=null)

return pbehind;

}

ac**:

class solution 

listnode *pbehind=plisthead;

while(pahead->next!=null)

return pbehind;

}};

劍指offer面試題15

面試題15 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。預備知識 鍊錶結點的定義如下 ...

劍指offer 面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...

劍指Offer面試題16 反轉鍊錶

反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...