思路:
1.因为要求链表倒数第 k 个节点,也就是求正数第length - k个节点。
链表又是个单链表,并且没有保存长度信息,所以需要循环一次计算length。第二次循环找到第length - k个节点。
2.快慢(双)指针
(1)快慢指针同时初始化为头节点
(2)快指针先走k步,然后快指针和慢指针同时走向后面的节点
(3)当快指针到达末尾遇到空指针时结束,此时慢指针到达的位置就是倒 数第K个节点的位置
注意:头节点为空或者K为0或者K大于链表长度时返回空值。
现在给出一个思路2的快慢双指针方法示例
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
import java.util.*;
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k==0){
return null;
}
ListNode fast=head;
ListNode slow=head;
while(k>0){
if(fast!=null){
fast=fast.next;
} else return null;
k--;
}
while(fast!=null){
fast=fast.next;
slow=slow.next;
}
return slow;
}
}