题目:输入一个链表,输出该链表中倒数第k个结点。
初看题目,感觉应该是从头到尾遍历链表,然后从尾回溯K步,因为是单向链表,此路不通。换条路吧。假设链表有n个结点,要找到倒数第K个结点,就是从头开始到第n-k+1个结点,但是n如何得到呢?需要从头到尾遍历,每遍历一个结点就count+1即可,这样需要遍历两次链表才能完成任务。如何才能遍历一次链表就能找到倒数第K个节点呢?
我们可以定义两个指针,第一个指针从头开始遍历到K-1个结点,第二个指针保存不动;从第K步开始,第二个指针也开始从链表头部遍历。由于两个指针的距离保持K-1不变,当第一个指针到尾部的时候,第二个指针正好到达倒数第K个结点。
代码如下:
要考虑是否是空链表,如果K==0,如果节点数小于K的三种情况。
}*/
import java.util.*;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k==0){ //空指针或者k==0的时候返回null
return null;
}
ListNode p1=head;
ListNode p2=null;
for(int i=0;i<k-1;i++){
if(p1.next!=null){
p1=p1.next;
}else{
return null; //如果节点数小于K,返回null;
}
}
p2=head;
while(p1.next!=null){
p1=p1.next;
p2=p2.next;
}
return p2;
}
}