看到这种题,一个很典型的想法是用快慢指针。
但其实也可以从头到尾计算链表长度len,再根据这个结果从头直接找到我们需要的节点len-k。
两者需要在链表上面跑的路程都是一样的。
前者多生成一个ListNode对象,后者多生成一个整型变量len。
另外记得讨论特殊情况
- head==null
 - k<=0
 - 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;
    }
}


京公网安备 11010502036488号