题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。
思路:两个指针,需要注意链表总数是否少于k。
/*
* 求链表的倒数第k个结点
*/
public static ListNode findKthToTail(ListNode head,int k){
if(head==null || k==0) return null;
ListNode first = head;
ListNode behind = head;
for(int i=0; i<k-1; i++){
if(first.next!=null)
first = first.next;
else{
return null;
}
}
while(first.next!=null){
first = first.next;
behind = behind.next;
}
return behind;
}
当我们用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些(比如一次在链表上走两步),或者让它先在链表上走若干步