题目描述 : 输入一个链表,输出该链表中倒数第k个结点。
解题思路 :
1.根据以上链表进行分析
2.算法思想 : 定义两个引用,即快慢指针,都从头节点开始向后走;
要找到倒数第k个节点,即要让快指针fast先走k-1步,然后两个引用在一起走,各走一步,当快指针fast引用的节点中的next为null时候,也就是fast走到尾节点时,此时slow引用的节点即为要找的倒数第k个节点;
代码如下 :
// 链表中倒数第k个结点
public ListNode FindKthToTail(int k) {
if (this.head==null){
return null;
}
if (k<=0 ){
return null; //判断k的值是否合法
}
ListNode slow=this.head;
ListNode fast=this.head;
for (int i = 0; i < k-1; i++) {
fast=fast.next;
if (fast==null){ //要是k的值不合符链表的长度,也就是fast引用到null时候,也是不合法的情况
return null;
}
}
while (fast.next!=null){
slow=slow.next;
fast=fast.next;
}
return slow;
}