方法一
先遍历整个链表,得到链表长度n,然后返回第n-k位即为倒数k位
时间复杂度O(2n-k)=O(n)
方法二
双指针法,fast=slow+k-1,若fast指向链表末尾后一位即nullptr,则此时slow正好在链表倒数第k位,返回slow即为所求
时间复杂度O(n)
class Solution {
public:
ListNode* getKthFromEnd(ListNode* head, int k) {
if(head==nullptr )
return head;
ListNode* fast=head;
ListNode* slow=head;
int i=1; //链表长度
while(fast!=nullptr){
if(i>k){
slow=slow->next;
}
fast=fast->next;
i++;
}
return slow;
}
};