链表是自己编写的数据结构,没有官方的类和方法可用。
看到解题中一个方法很好,用两个指针,第一个指针先移动k,定出一个大小为k的窗口,然后两个窗口一起移动。
最后,当先移动的窗口到了末尾时,另一个指针就是要找的节点。
/* class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
} */
public ListNode FindKthToTail(ListNode head,int k) {
if(head== null ||k<=0) {
return null;
}
ListNode pre = head;
ListNode last = head;
for (int i = 1; i < k; i++) { //之前从0开始 错了。
if(pre.next != null) {
pre = pre.next;
}
else {
return null;
}
}
//此时已经链表中至少有k个元素了
while(pre.next != null) {
pre = pre.next;
last = last.next;
}
return last;
}