劍指 Offer 22 鍊錶中倒數第k個節點

2022-09-19 14:12:18 字數 1229 閱讀 7289

劍指 offer 22. 鍊錶中倒數第k個節點

乙個比較簡單的辦法是先遍歷一趟,得到長度l後,發現如下關係,倒數第1個節點為第l - 1個節點,倒數第2個節點為第l - 2個節點,故返回第l - k個節點即可。

正著數也就是l - k - 1索引位置處,故而遍歷條件為i <= l - k - 1i < l - k都可。

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

return newhead;

}private int getlength(listnode head)

return l;}}

也可以用棧來存,再依次將k - 1個元素出棧即可,所以遍歷條件為i = 0; i < k - 1或者是i = 1; i <= k - 1

最後返回棧頂節點。

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

for(int i = 1; i < k; i++)

return st.peek();}}

還可以使用快慢指標的方式,可以看出倒數第i個距離最後的null指標域長度為i,所以倒數第k個節點距離null的長度為k,可以先讓快指標走k步,在讓快慢指標同時出發,如果快指標走到了null位置,此時slow指標正好距離null指標有k個長度,此時返回慢指標即可。

/**

* definition for singly-linked list.

* public class listnode

* }*/class solution

while(fast != null)

return slow;}}

劍指offer 22 鍊錶中倒數第K個結點

這道題的題目可以描述為 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。typedef int datatype typedef struct listnode listnode 初始化 void listinit listnode ppfirst 這道題的普通解題思路分為三步 1.定義兩個指標forwa...

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

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給定乙個鍊錶 1 2 3 4 5,和 k 2.返回鍊錶 4 ...

劍指 Offer 22 鍊錶中倒數第k個節點

劍指 offer 22.鍊錶中倒數第k個節點 難度 簡單 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給...