题目描述
输入一个链表,输出该链表中倒数第k个结点。
输入
1,{1,2,3,4,5}
返回值
{5}
思路:快慢指针
首先让快指针先行k步,然后让快慢指针每次同行一步,直到快指针指向尾节点下一个的空节点,慢指针就是倒数第K个节点。
1-2-3-4-5-null,k=2,first快指针先走两步步到节点3,此时 second慢指针节点为1,然后 first,second同时往前走,当再走三步时,此时快指针 first指向了尾节点指向的空节点,慢指针second指向了
倒数第 k (2)个节点4
特别注意:链表长度小于 K 的情况
代码如下:
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k <= 0)
return null;
ListNode first = head;//快指针
ListNode second = head;//慢指针
for(int i = 0; i < k;i++) { //不能改成小于k,因为k正好是链表的长度时,不满足下面if的条件导致返回为空
if(first != null){
first = first.next;
}
else{
return null; // k大于链表的长度
}
}
while(first != null){ //结束条件是快指针first正好为尾节点
first = first.next;
second = second.next;
}
return second;
}