來源:劍指Offer
參考:https://www.e-learn.cn/content/qita/2102473
思路:設置兩個指針,slow和fast都從頭結點開始,fast先向前走k步,此時二者相差k個節點;從這裏開始,兩個指針以相同速度向後移動,保持二者始終相差k步。當fast到達鏈表尾部時,slow則指向倒數第k個節點。
代碼:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode findKthToTail(ListNode pListHead, int k) {
ListNode slow = pListHead, fast = pListHead;
for(int i = 0; i < k; i++) {
if(fast == null)
return null;
fast = fast.next;
}
while(fast != null) {
slow = slow.next;
fast = fast.next;
}
return slow;
}
}