劍指 offer 22. 鍊錶中倒數第k個節點
乙個比較簡單的辦法是先遍歷一趟,得到長度l
後,發現如下關係,倒數第1個節點為第l - 1
個節點,倒數第2個節點為第l - 2
個節點,故返回第l - k
個節點即可。
正著數也就是l - k - 1
索引位置處,故而遍歷條件為i <= l - k - 1
或i < 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的節點。示例 給...