题目
难度:简单
注意:链表可能为空,k有可能不合理或者大于链表的总长度。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* head, unsigned int k) {
if(!head || k <= 0) return nullptr; //先判断链表是否为空以及k是否合法
ListNode *fast = head, *slow = head; //使用快慢指针 快指针先走k步 再一起走
for(int i = 0; i < k; i++){
if(fast == nullptr) return nullptr;
fast = fast->next;
}
while(fast){ //快指针到末尾的下一个位置的时候 慢指针就是倒数第k个数的位置
fast = fast->next; //举个例子:1 2 3 4 5 找倒数第2个 答案应该是4
slow = slow->next;//快指针先走2步 到3 此时慢指针在1 再同时走
} //快指针走3步到null的位置 此时slow在4号位置
return slow;
}
};