栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 剑指Offer 22.链表中倒数第k个结点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 剑指Offer 22.链表中倒数第k个结点

题目描述

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

示例

给定一个链表: 1->2->3->4->5, 和 k = 2.
返回链表 4->5.

解法 1. 递归 C++
class Solution {
    ListNode* _head;
    int _k;
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
        if (head == NULL) {
            return head;
        }
        _head = head;
        _k = k;
        recur(head->next);
        return _head;
    }
    void recur (ListNode* head) {
        if (head == NULL) {
            return;
        }
        recur(head->next);
        if (--_k == 0) {
            _head = head;
        }
    }
};
2. 双指针(快慢指针) C++
class Solution {
public:
    ListNode* getKthFromEnd(ListNode* head, int k) {
        if (head == NULL) {
            return head;
        }
        ListNode* left = head;
        ListNode* right = head;
        while (right != NULL && k != 0) {
            right = right->next;
            --k;
        }
        while (right != NULL) {
            right = right->next;
            left = left->next;
        }
        return left;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779059.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号