题目:输入一个链表,输出该链表中倒数第k个结点。链表从1开始;
思路:可以设置两个指针。第一个指针先走K-1步。从第k步开始两个指针同时向后移动,等到前指针到达尾节点的时候,后指针到达倒数第K个节点。
注意点:功能测试点
1、边界值的判断:1、当k为头结点;k为尾结点;2、k的节点数大于链表的长度;k为0
2、k为中间数字
public ListNode FindKthToTail(ListNode head,int k) {
//考虑链表为空和k为非法值的情况
if(head==null||k==0)
return null;
//设置两个指针。第一个指针先走K-1步,从第K步开始,第二个指针开始遍历
//当指针1到达尾节点..时,指针2指向倒数第K个节点
ListNode preNode=head;
ListNode behindNode=null;
for(int i=1;i<k;i++){
if(preNode.next!=null)//边界值的判断+
preNode=preNode.next;
else
return null;
}
behindNode=head;
while(preNode.next!=null){
preNode=preNode.next;
behindNode=behindNode.next;
}
return behindNode;
}
本文介绍了一种高效求解链表中倒数第K个结点的算法,通过设置双指针,先让一指针前进K-1步,随后两指针同步移动直至前指针达尾部,此时后指针即指向目标结点。文章详细讨论了边界值的判断及功能测试点。
183

被折叠的 条评论
为什么被折叠?



