来源:剑指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;
}
}