输入一个链表,输出该链表中倒数第k个结点。
首先,大部分题目是不允许改变给出的数据结构来进行解答,否则会报错。
然后,考虑问题不能考虑正常情况 ,题目中没有说k不等于0而且链表是否为空。
则本来是让p先跑k-1个结点,这个时候要先跑k次(因为判断条件是p.next!=null而不是p!= null,这种判断条件可以排除k=0且head==null的情况。
如果K=0 pre跟着p一起跑到null
如果head=null 直接返回0
如果k大于链表长度则由count判断 直接返回null
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode pre=null,p=null;
//两个指针都指向头结点
p=head;
pre=head;
//记录k值
int a=k;
//记录节点的个数
int count=0;
//p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre指针开始跑,
//当p指针跑到最后时,pre所指指针就是倒数第k个节点
while(p!=null){
p=p.next;
count++;
if(k<1){
pre=pre.next;
}
k--;
}
//如果节点个数小于所求的倒数第k个节点,则返回空
if(count<a) return null;
return pre;
}
}