在牛客网的第一篇双百题解

链表中倒数第k个结点

http://www.nowcoder.com/questionTerminal/886370fe658f41b498d40fb34ae76ff9

题目描述:
输入一个链表,输出该链表中倒数第k个结点。

按部就班的解法,这就双百了?

不过就事论事,题目中需要考虑边界值的地方还是比较多的。
话不多说,直接上代码:
ListNode* FindKthToTail(ListNode* pHead, int k) {
    if (!pHead || k < 0) {
        return nullptr;
    }
    int length = 1;
    ListNode* len = pHead;
    // 计算链表长度
    while (len != nullptr && len->next != nullptr) {
        len = len->next;
        length ++;
    }
    // 判断k值的合理性
    if (k > length) {
        return nullptr;
    }
    ListNode* first = pHead;
    // 首次遍历链表
    for (int i = 0; i < k; i++) {
        first = first->next;
        if (first->next == nullptr) {
            return pHead;
        }
    }
    ListNode* second = pHead;
    // 二次遍历链表
    while (first != nullptr &&
           first->next != nullptr) {
        first = first->next;
        second = second->next;
    }
    return second->next;
}


全部评论
没有必要多遍历一次计算链表长度
点赞 回复 分享
发布于 2021-03-11 10:18
楼上正解,确实没必要再去遍历链表计算长度,在第一次遍历的时候判断就好了
点赞 回复 分享
发布于 2021-03-16 10:59
直接复制粘贴的,只超过了20%。 这个时间不准确
点赞 回复 分享
发布于 2021-03-31 12:56

相关推荐

我即大橘:耐泡王
点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务