如果是采用一个指针,则需要遍历两次链表。第一次遍历链表取到长度,第二次取 length-k+1 个节点。
这个方法采用两个指针,第一个指针先遍历到第k个节点,然后再插入一个指针到头结点,这样两个指针相当于形成了一个长度为k的尺子,一起遍历到链表的尾节点,这样第二个指针指向的就是链表倒数第k个节点。
public class Solution {
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++){
if(pre.next != null){
pre=pre.next;
}
else {
return null;
}
}
while(pre.next != null){
pre=pre.next;
last=last.next;
}
return last;
}
}