看到这种题,一个很典型的想法是用快慢指针。
但其实也可以从头到尾计算链表长度len,再根据这个结果从头直接找到我们需要的节点len-k。
两者需要在链表上面跑的路程都是一样的。
前者多生成一个ListNode对象,后者多生成一个整型变量len。

另外记得讨论特殊情况

  1. head==null
  2. k<=0
  3. len<k

这里的k是不用对len取整的!

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head==null||k==0) return null;
        int len=1;
        ListNode p=head;
        while(head.next!=null){
            head=head.next;
            len++;
        }
        if(len<k) return null;
        k=(len-k)%len;
        head=p;
        while(k!=0) {
            head=head.next;
            k--;
        }
        return head;
    }
}