public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k <= 0){
return null;
}
ListNode fast = head;
ListNode slow = head;
while(k-- != 0){
if(fast != null){
fast = fast.next;
}else return null;
}
while(fast != null ){
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
最后一个循环中,为什么用fast.next != null 会出错呢?遍历到达的位置不是一样的吗
一、简单的验证
1. 假设k=1
2. 第一个while循环之后,k=0,fast = null
3. 第二个while循环,fast.next 即 null.next, 报空异常
二、代码分析
while(k-- != 0){
if(fast != null){
//猜测是单向链表,最后一个结点的next为null,此处最后回为空
//除非程序能确保任意结点的next都不为空,如循环链表
fast = fast.next;
}else
return null;
}
//fast为null,报空异常
while(fast != null ){
fast = fast.next;
slow = slow.next;
}