//两个指针,其中一个指针先走k步,然后两个指针一起走
//还有一道求链表中间结点的题也可以这样做--其中一个指针走两步、另一个走一步
//两道题都需要注意边界,具体问题具体分析
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
//1.设置两个快慢指针
ListNode quickNode = head;
ListNode slowNode = head;
//2.让quickNode先走k步
while(k!=0){
if(quickNode==null){ //注意防止k步还没走完,就已经走到空的情况--k>链表长度
return null;
}
quickNode=quickNode.next; //这一步最边界的位置就是这一步走完后指针为空
//如果循环也正好跳出,说明k的长度为链表长度
k--;
}
//3.让quickNode和slowNode同时走
while(quickNode!=null){
quickNode=quickNode.next;
slowNode=slowNode.next;
}
return slowNode;
}
}