解法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个,可以转换成求正数第多少个呢?