解题思路

/**
* 两个指针p1,p2,开始都指向头结点
* 先让p2走k步
* 然后p1,p2同时向下走
* 当p2指向null的时候,p1就是倒数第k个节点
*/

代码

/*
class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/

public static ListNode FindKthToTail(ListNode head,int k) {
if(head == null) return null;
ListNode p1 = head,p2 = head;
while (k>0 && p2 != null){
p2 = p2.next;
k--;
}
//p2 指向head说明k<=0,p2==null && k>0说明 k超过了链表的长度
if(p2 == head || (p2 == null && k>0)) return null;
while (p2!=null){
p1 = p1.next;
p2 = p2.next;
}
return