思路一
求链表长度,然后倒数第k个节点就是正数n-k个
class Solution {
public ListNode getKthFromEnd(ListNode head, int k) {
int n=0;
for(ListNode nd=head;nd!=null;nd=nd.next) n++; //求链表长度
ListNode dum=head;
if(n-k<0) return null;
for(int i=0;i<n-k;i++)
dum=dum.next;
return dum;
}
}
思路二
快慢指针法
两个指针,一个快指针指向k+1;一个慢指针指向1
当快指针指向null的时候,慢指针就是指向倒数第k个
ListNode fast=head;
ListNode slow=head;
while(fast!=null && k>0)
{
fast=fast.next;
k--;
}
while(fast!=null)
{
fast=fast.next;
slow=slow.next;
}
return slow;