LeetCode 707. 设计链表

2023-11-06

题目链接:https://leetcode.cn/problems/design-linked-list/

C++代码如下:

class MyLinkedList {
private:
    // 定义单链表的节点
    struct ListNode {
        int val;
        ListNode* next;
        ListNode(int x) : val(x), next(nullptr) {}
    };
    ListNode* head; // 链表的第一个节点
    int size; // 链表的长度

public:
    MyLinkedList() {
        head = nullptr;
        size = 0;
    }
    
    int get(int index) {
        // 如果索引无效,则返回-1
        if (index < 0 || index >= size) return -1;

        // 获取链表中第index个节点的值
        auto cur = head;
        for (int i = 0; i < index; i++) {
            cur = cur->next;
        }
        return cur->val;
    }
    
    void addAtHead(int val) {
        // 在链表的第一个元素之前添加一个值为val的节点,插入后,新节点将成为链表的第一个节点
        auto tmp = new ListNode(val);
        tmp->next = head;
        head = tmp;
        size++;
    }
    
    void addAtTail(int val) {
        // 如果链表中没有节点,则插入的新节点将成为链表的第一个节点
        if (head == nullptr) {
            head = new ListNode(val);
            size++;
            return;
        }

        // 如果链表中有节点,则将值为val的节点追加到链表的末尾
        auto cur = head;
        while (cur->next != nullptr) {
            cur = cur->next;
        }
        cur->next = new ListNode(val);
        size++;
    }
    
    void addAtIndex(int index, int val) {
        // 如果index大于链表长度,则直接返回
        if (index > size) return;

        // 如果index小于等于0,则在头部插入值为val的节点
        if (index <= 0) {
            addAtHead(val);
            return;
        }

        // 如果index等于链表长度,则将值为val的节点追加到链表的末尾
        if (index == size) {
            addAtTail(val);
            return;
        }

        // 在链表的第index个节点之前添加值为val的节点
        auto cur = head;
        for (int i = 0; i < index - 1; i++) {
            cur = cur->next;
        }
        auto tmp = new ListNode(val);
        tmp->next = cur->next;
        cur->next = tmp;
        size++;
    }
    
    void deleteAtIndex(int index) {
        // 如果索引无效,则直接返回
        if (index < 0 || index >= size) return;

        // 删除链表的第一个节点
        if (index == 0) {
            head = head->next;
            size--;
            return;
        }

        // 删除链表的第index个节点
        auto cur = head;
        for (int i = 0; i < index - 1; i++) {
            cur = cur->next;
        }
        cur->next = cur->next->next;
        size--;
    }
};

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList* obj = new MyLinkedList();
 * int param_1 = obj->get(index);
 * obj->addAtHead(val);
 * obj->addAtTail(val);
 * obj->addAtIndex(index,val);
 * obj->deleteAtIndex(index);
 */

注:上面代码侧重于算法实现,没有进行内存管理,这对C/C++选手来说,实属缺憾。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 707. 设计链表 的相关文章

随机推荐

  • 数据结构(栈和队列)

    Queue常用子类 PriorityQueue Deque常用子类 LinkedList以及ArrayDeque Queue有一个直接子类PriorityQueue 而Deque中直接子类有两个 LinkedList以及ArrayDeque
  • 时间序列分析 - 移动平均SMA, EMA(EWMA) 之python

    pandas pandas DataFrame rolling pandas DataFrame ewm pandas DataFrame mean 其中rolling可以指定窗口类型win type 比如boxcar boxcar tri
  • jsp为基础,设计并实现了一个酒店客房管理系统

    摘要 本毕业设计以jsp为基础 设计并实现了一个酒店客房管理系统 该系统包括客房信息管理 客房预订管理和客房入住管理等模块 通过使用jsp技术 能够实现酒店客房的在线管理 提高客房管理的效率和准确性 关键词 jsp 酒店客房管理系统 客房信
  • gauge自动化框架踩坑(五):关于表格

    官方文档使用表格的方式有两种 1 表格参数 2 动态参数 现针对不同的情况做一分析 一 表格参数 官方文档的解释是 表格参数被用来作为一个step 执行多条数据 以官网的模板项目为例 这里给了一个表格 作为一个step Almost all
  • 将时间序列转成图像——马尔可夫转移场方法 Matlab实现

    目录 1 方法 2 Matlab代码实现 3 结果 若觉文章质量良好且有用 请别忘了点赞收藏加关注 这将是我继续分享的动力 万分感谢 其他 1 时间序列转二维图像方法及其应用研究综述 vm 1215的博客 CSDN博客 2 将时间序列转成图
  • BOOST升压电路PCB布局布线

    一 正确找出BOOST的高频电流环路 尽可能让di dt大的路径小 在boost中为开关管 二极管 与输出电容 二 输入环路 先经过Cin再到芯片输入脚 三 输出环路 重要 SW覆盖面积要小 四 反馈环路 重要 与FB相连的两个电阻越靠近F
  • 零拷贝内存 & 固定内存

    一 总览 虚拟内存是一种计算机内存管理的技术 它让程序认为程序自身有一段完整的连续可用的内存 一个地址空间 当程序运行时所占的内存空间大于物理空间容量 操作系统可以将暂时不用的数据放入到磁盘 用的时候再拿出来 这样磁盘有一部分空间就是用来存
  • log4cplus 分级显示控制

    前不久已经整理过一篇关于log4cplus介绍和使用基础的文章 这次来看看如何更好的使用log4cplus这个 功能强大的日志系统吧 层次结构 在log4cplus中 所有logger都通过一个层次化的结构 其实内部是hash表 来组织的
  • Python中@property和@setter的用法

    一 property 用法 可以使用 property装饰器来创建只读属性 property装饰器会将方法转换为相同名称的只读属性 这样可以防止属性被修改 实例 class DataSet object property def metho
  • mysql grouping sets_GROUPING SETS与GROUP_ID

    SELECT E DEPARTMENT ID DID E JOB ID JOB E MANAGER ID MID SUM E SALARY SUM SAL COUNT E EMPLOYEE ID CNT GROUP ID GG FROM E
  • FreeRTOS源码探析之——软件定时器

    软件定时器是FreeRTOS中的一个重要模块 使用软件定时器可以方便的实现一些与超时或周期性相关的功能 本篇从FreeRTOS的源码入手 来分析FreeRTOS软件定时器的运行机理 1 基础知识 1 1 软件定时器与硬件定时器的区别 硬件定
  • 开放-封闭原则

    我们在做任何系统的时候 都不要指望系统一开始就完全确定需求 然后再也不发生变化 这是不现实 也是不科学的想法 既然需求是一定会发生变化的 那么如何在面对需求的变化时 设计的软件可以相对容易修改 不至于说 新需求一来就要把整个程序都推倒重来呢
  • 【Python】利用format方法保留三位小数

    format方法是内置的Python字符串格式化方法 基本语法为 str format 它增强了字符串格式化的功能 基本语法是通过 和 来代替以前的 format 函数可以接收多个参数 位置可以不按顺序 具体实例如下 print 0f fo
  • UP-DETR:用无监督的方式对Transformer进行预训练来做物体检测

    点击上方 AI公园 关注公众号 选择加 星标 或 置顶 因公众号更改了推送规则 记得读完点 在看 下次AI公园的新文章就能及时出现在您的订阅列表中 作者 Synced 编译 ronghuaiyang 导读 不仅对CNN的backbone预训
  • ReactHooks之useEffect

    useEffect 副作用钩子 useEffect相当于 componentDidMount 组件挂载 componentDidUpdate 组件更新 和 componentWillUnmount 组件将要销毁 这三个生命周期函数的组合 u
  • 计算机处理器性能排名,电脑处理器性能排行榜

    cpu可以说是电脑的心脏 作为电脑的核心存在 cpu性能对电脑性能的影响不言而喻 虽然说因为人民币贬值 cpu价格全面上涨近10 那么电脑处理器性能的市场行情怎么样 下面给大家讲解电脑处理器性能排行榜了 电脑处理器性能排行榜 下面这个cpu
  • Windows 7下安装CentOS 7 Linux双操作系统

    参考文章 1 https blog csdn net zh175578809 article details 78576193 2 https jingyan baidu com article c275f6bacc3326e33c7567
  • Xmodem/Ymodem/Zmodem协议详解

    序 Xmodem Ymodem和Zmodem协议是最常用的三种通信协议 Xmodem协议是最早的 传输128字节信息块 之后也支持到1k的传输 Ymodem是Xmodem的增强版协议 具有传输快速稳定的优点 它可以一次传输1024字节的信息
  • 微信小程序tab切换,(scroll-view + swiper)可滑动切换,导航栏跟随滚动实现

    微信小程序tab切换 scroll view swiper 可滑动切换 导航栏跟随滚动实现 1 wxml tab
  • LeetCode 707. 设计链表

    题目链接 https leetcode cn problems design linked list C 代码如下 class MyLinkedList private 定义单链表的节点 struct ListNode int val Li