题目:输入一个链表,输出该链表中倒数第k个结点
关于这道题目,我首先想到的解决方法就是先求出链表的长度,然后返回第length-k个节点
但是,这么做会遍历两次链表,求链表的长度会遍历依次链表,返回第k个节点又会遍历一次链表
为了遍历一次链表,就返回倒数第k个节点,我们采用类似于 "尺子" 的方法
定义两个节点,让其中一个节点先走k-1步,然后两个节点一起走,直到第一个节点走到尾节点,第二个节点就是倒数第k个节点
分析过程:
1) fast和slow都指向头节点
2) fast先走k-1步
3) fast和slow一起走,直到fast走到尾节点
4) 此时的slow就是倒数第k个节点
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k <= 0){
return null;
}
ListNode fast = head;
ListNode slow = head;
while(k-1 > 0) { //fast先走K-1步
if(fast.next != null) {
fast = fast.next;