输入一个链表,输出该链表中倒数第k个结点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
//考虑鲁棒性
//输入的head为空指针。由于代码会试图访问空指针指向的内存,程序崩溃。
//输入的以head为头结点的链表的结点总数少于k。由于在for循环中会在链表上向前走k-1步,仍然会由于空指针造成程序崩溃。
if(pListHead == nullptr || k==0)
return nullptr;
ListNode* fast = pListHead;
ListNode* slow = pListHead;
//快指针先走K-1步,慢指针不变
//然后快慢指针同时走
while(--k){
if(fast->next != nullptr)
fast = fast->next;
else
return nullptr;
}
while(fast->next != NULL){
fast = fast->next;
slow = slow->next;
}
return slow;
}
};