题目描述
输入一个链表,输出该链表中倒数第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;
}
};

链表倒数第K个节点算法
本文介绍了一种高效查找链表中倒数第K个节点的方法,通过使用快慢指针技巧,实现了一次遍历即可找到目标节点。文章详细解释了算法思路,并提供了完整的代码实现。
1113

被折叠的 条评论
为什么被折叠?



