题目描述
输入一个链表,输出该链表中倒数第k个结点。
示例1
输入:
1,{1,2,3,4,5}
复制
返回值:
{5}
思路
我们用快慢指针
假如我们求倒数第三个结点,先让fast走3步,此时slow和fast包括的节点个数为3+1=4个。
再让fast和slow同时走一步,当fast=null时跳出循环,此时slow就是倒数第k个结点。
此时slow和fast包括的结点实际上是3个,slow刚好在倒数第三个节点上。
代码实现
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k <= 0) return null;
ListNode fast = head;
ListNode slow = head;
//让fast先走k步
for(int i = 0; i < k; i++) {
if(fast == null) return null;
fast = fast.next;
}
//让fast,slow同时走一步
while(fast != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}