【题目描述】
输入一个链表,输出该链表中倒数第k个结点。
eg:
输入 | 1,{1,2,3,4,5} |
---|---|
输出 | {5} |
【官方解法】
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (!pListHead || k <= 0) return nullptr; //判断K<=0或者头节点最开始为空,也就是没有节点
int n = 0; //n来存储这个链表的长度
ListNode *cur = pListHead; //将头指针的标号给cur
while (cur) {
cur = cur->next;
++n; //此循环计算出链表的长度
}
if (n < k) return nullptr; //总结点的个数n<k
n -= k; //找到需要输出的元素的前面的指针数
while (n--) {
pListHead = pListHead->next; //找到需要输出的元素
}
return pListHead;
}
};
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (!pListHead || k <= 0) return nullptr;
auto slow = pListHead, fast = pListHead;
while (k--) {
if (fast)
fast = fast->next;
else
return nullptr; //如果单链表长度 < K,直接返回
}
while (fast) {
slow = slow->next;
fast = fast->next;
}
return slow;
}
};