链表中倒数第k个节点
题目要求
输入一个链表,输出该链表中倒数第k个结点。
题目解析
如果遍历链表去找的话,需要遍历两遍,第一遍得出链表的长度,第二遍再去找倒数第k个数,这样很耗费时间,我们采取另一种方法进行操作
我们可以用两个指针,都从头结点开始,然后一个指针先走k-1步,然后两个指针同时开始向前走,这样第一个指针到达最后时,另一个节点就到达了倒数第k个位置。
代码解析
public ListNode FindKthToTail(ListNode head,int k) {
//判断头结点是否为空,并且K值是否有效
if(head==null||k<=0) {
return null;
}
//设置两个节点,都从头结点开始
ListNode p1 =head;
ListNode p2 =head;
//先将一个节点向后移动K-1个位置,从侧面也判断出这个链表的长度是否大于K
for(int i=0;i<k-1;i++) {
if(p1.next!=null) {
p1=p1.next;
}else {
return null;
}
}
//将两个节点同时开始移动,当第一个节点移动到最后时,第二个节点也就移到了位置K
while(p1.next!=null) {
p1=p1.next;
p2=p2.next;
}
return p2;
}