解法1:快慢指针
① 设链表长度为n,定义两个指针a、b都指向头结点,当a指针指向最后一个结点时,a的下标是n-1
② 倒数第k个结点的下标是n-k,两者相差k-1个距离。所以让a指针先遍历向前走k-1步,此时a与b也相差k-1了,符合。
③ 然后让它们一起向前走即可。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null || k<1){
return null;
}
ListNode fast=head,slow=head;
for (int i = 0; i < k - 1; i++){
if(fast.next!=null){
fast=fast.next;
}
else
return null;
}
while(fast.next!=null){
fast=fast.next;
slow=slow.next;
}
return slow;
}
}解法2:普通解法
很显然,求倒数第k个,可以转换成求正数第多少个呢?

京公网安备 11010502036488号