题目描述
输入一个链表,输出该链表中倒数第k个结点。
题目地址
思路
- 设置快慢指针快指针先走
k-1
步,然后慢指针开始走,当快指针到达链表尾时,慢指针即指向倒数第k
个节点 - 健壮性检验:
- 输入是一个空链表
- 链表长度小于 k
Code
class Solution {
public:
ListNode * FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead == nullptr)
return nullptr;
ListNode * slow = pListHead;
ListNode * fast = pListHead;
//先让 fast 走 k-1 步
while (k && fast) {
fast = fast->next;
k--;
}
// 如果 k > 0,说明 k 大于链表长度
if (k > 0)
return nullptr;
// 接着让两个指针一起往后走,当 fast 到最后时,slow 即指向倒数第 k 个
while (fast) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
};