核心思路:

要找倒数第几个? 用两个指针A和B

比如要倒数第三个

  • B指针先走两步
  • 然后A和B两个指针一起走
  • 等B指针走到头的时候,A指针就是倒数第三个了

c++实现

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pHead, int k) {
        // write code here
        if(!pHead) return nullptr;    //空链表直接返回空
        if(k==0) return nullptr;      //倒数0个也直接返回空
        ListNode* left = pHead;       //初始化两个指针
        ListNode* right = pHead;
        for(int i=1; i<k; i++){      //初始化就在第一步,右指针从1开始往后挪
            if(!right->next) return nullptr;   //右指针未到预定地点就到头了,直接返回空
            right = right->next;
        }
        while(right->next){         //两个指针一起往前走,直到右边指针到头
            left = left->next;
            right = right->next;
        }
        return left;
    }
};