题目描述
输入一个链表,输出该链表中倒数第k个结点。
题目解析
本题的解法很多,通过链表的逆置或者遍历出链表的个数都是可以的,不过最好的方法应该就是:先通过将遍历指针移动k个位置,然后再来一个指针指向头部,两者一块移动,当后边指针到尾部的时候,头部指针正好为倒数第k个位置,因为他们相隔k-1个位置。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k==0)
return null;
ListNode p=head;
//先移动到k个位置,注意移动长度
for(int i=0;i<k-1;i++)
{
p=p.next;
if(p==null&&i<k)
return null;
}
//只想头部节点
ListNode q=head;
//两者共同移动直到p到末尾
while(p!=null){
p=p.next;
//p到最后一个结点时,q=q.next这时候多移动了一个因此需要提前退出
if(p==null)
break;
q=q.next;
}
return q;
}
}