看到这种题,一个很典型的想法是用快慢指针。
但其实也可以从头到尾计算链表长度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号