核心思路:
要找倒数第几个? 用两个指针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;
}
};