劍指offer 面試題22 鍊錶中倒數第k個節點

2021-10-02 16:01:03 字數 1073 閱讀 7332

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

第一次遍歷鍊錶,計算鍊錶長度length

第二次遍歷鍊錶,讓指標向後移動length - k次,就可以得到倒數第k個結點。

/* 鍊錶結點的資料結構

public class listnode

}*/public

class

solution

listnode p = head, r = head;

int len =0;

while

(r != null)

if(len < k)

for(

int i =

0; i < len - k; i++

)return p;

}}

如果我們輸入的鍊錶和k值都合法,那麼這個題其實用下面的說法更好理解一些。

思路

設兩個指標firstsecond,初始時均指向頭結點,first 向後移動k - 1次,此時first 指向的是正數第k個結點,在這之後,當first的後繼節點不為空時,second和first就同時後移,當first的後繼節點為空,就說明first已經指向了鍊錶的尾結點,那此時second指向的結點,就是倒數第k個結點,因為first和second之間的距離剛好是k-1。各位看官老爺畫圖看看就會明白了,很容易理解。

**

class

solution

listnode first = head, second = head;

int count =1;

// 計數器count,初始化為1,因為已經指向了頭結點

while

(first.next != null)

first = first.next;

}return r;

}}

ps:印象裡蘇大計算機考研有個程式設計題是寫這個,倒數第k個結點。

《劍指offer》面試題22 鍊錶中倒數第k個節點

鍊錶節點定義如下 struct listnode 思路 定義兩個指標,第乙個指標先指向第k個節點,既向前走k 1步,然後另第二個指標指向頭結點,然後兩個指標一起向後移動,直到第乙個指標走到最後乙個節點時,此時第二個指標正好指向倒數第k個節點。注意 1.要判斷輸入是否為空指標,若為空指標,試圖訪問空指...

劍指offer 面試題 22 鍊錶中倒數第K個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。注意 樣例 輸入 鍊錶 1 2 3 4 5 k 2 輸出 4先判斷 k 的合法性,如果 k 0,則返回null。求出鍊錶的長度。再判斷k是否大於鍊錶的長度。如果大於,則返回null,否則繼續。從頭開始遍歷 len k 個節點,則下乙個節點,也就是第 len ...

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

面試題22 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。方法一 遍歷鍊錶兩次,第一次統...