设计链表(链表篇)

news2025/1/21 2:59:36

你可以选择使用单链表或者双链表,设计并实现自己的链表。

单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。

如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。

实现 MyLinkedList 类:

 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/design-linked-list

这道题目设计链表的五个接口:

  • 获取链表第index个节点的数值
  • 在链表的最前面插入一个节点
  • 在链表的最后面插入一个节点
  • 在链表第index个节点前面插入一个节点
  • 删除链表的第index个节点

下面采用的设置一个虚拟头结点,代码如下:

class MyLinkedList {
public:
    struct LinkedNode{
        int val;
        LinkedNode* next;
        LinkedNode(int val):val(val),next(nullptr){}
    };

    //将虚拟头节点作为头节点(生成头节点)
    MyLinkedList()
    {
       dummpyNode = new LinkedNode(0);
       size = 0;
    }
    
    //这点要把虚拟节点算进去,所以size-1
    int get(int index) 
    {
        if(index > (size - 1) || index < 0)
        {
            return -1;
        }

        LinkedNode* cur = dummpyNode->next;
        while(index--)
        {
            cur = cur->next;
        }

        return cur->val;
    }
    
    void addAtHead(int val) 
    {
        LinkedNode* newNode = new LinkedNode(val);
        newNode->next = dummpyNode->next;
        dummpyNode->next = newNode;
        size++;
    }
    
    void addAtTail(int val) 
    {
        LinkedNode* newNode = new LinkedNode(val);
        LinkedNode* cur = dummpyNode;

        while(cur->next != NULL)
        {
            cur = cur->next;
        }

        cur->next = newNode;
        size++;
    }
    
    //添加头尾有特殊的函数实现功能,这点不需要实现所以是
    //index > size
    void addAtIndex(int index, int val) 
    {
        if(index > size || index < 0)
        {
            return;
        }

        LinkedNode* newNode = new LinkedNode(val);
        LinkedNode* cur = dummpyNode;

        while(index--)
        {
            cur = cur->next;
        }

        newNode->next = cur->next;
        cur->next = newNode;
        size++;
    }
    
    //这点有>=是因为删除不涉及头尾
    void deleteAtIndex(int index) 
    {
      if(index >= size || index < 0)
      {
          return;
      }

      LinkedNode *cur = dummpyNode;
      while(index--)
      {
          cur = cur->next;
      }
      LinkedNode* tmp = cur->next;
      cur->next = cur->next->next;
      delete tmp;
      size--;
    }

private:
    LinkedNode *dummpyNode; //虚拟头节点
    int 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);
 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/434526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux_红帽8学习笔记分享_5

Linux_红帽8学习笔记分享_5 文章目录 Linux_红帽8学习笔记分享_51. UMASK反掩码1.1如何查看反掩码umask1.2 UMASK反掩码的作用1.2.1对于目录来说1.2.2对于文件来说 1.3如何修改UMASK反掩码1.4普通用户反掩码的测试 2.whereis的使用3. SUID权限弥补(主要针对文件,所有者执行位变…

第14章_数据结构与集合源码

第14章_数据结构与集合源码 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 1. 数据结构剖析 我们举一个形象的例子来理解数据结构的作用&#xff1a; 战场&#xff1a;程序运行…

认识Object类和深浅拷贝

本文介绍了Object类以及Object类部分方法,toString方法,equals和hashCode方法(重写前和重写后的对比),getClass方法,clone方法,以及拷贝新对象时会出现的深浅拷贝, 内容较长,耗时一天,建议收藏后观看~ Object类和深浅拷贝 一.初识Object类1.Object类接收所有子类实例2.Object类…

【C 字符串】02 常用字符串函数(命令行参数)

Navigator 一、strlen()函数—统计长度二、strcat()函数—拼接三、strncat()函数—strcat()的升级四、strcmp()和strncmp()—比较五、strcpy()和strncpy()—拷贝六、sprintf()函数—合并多个字符串七、其他可能用到的字符串函数八、ctype.h中的字符函数九、把字符串转换为数字十…

(03)基础强化:静态类静态成员,静态构造函数,抽象类抽象成员,值类型和引用类型,Ref

一、静态成员 1、方法重写注意事项 1&#xff09;子类重写父类方法时&#xff0c;必须与父类保持一致的方法签名与返回值类型。即: 方 法名、返回值类型、参数列表都必须保持一致。[访问修饰符也得一致] 2&#xff09;“方法签名”:一般是指…

VScode---visual stdio code快速安装教程(Windows系统)

1.下载VSCode安装包&#xff0c;官网传送门https://code.visualstudio.com/ 选择Windows下的User Installer 64 bit 直接下载速度如果很慢&#xff0c;在浏览器或者下载软件中就可以看到这么一个下载地址了&#xff0c;复制链接地址&#xff08;如下图箭头所指&#xff09;。 …

本节作业之5秒后自动关闭广告、倒计时、发送短信、5秒之后自动跳转页面、获取URL参数数据

本节作业之5秒后自动关闭广告、倒计时、发送短信、5秒之后自动跳转页面、获取URL参数数据 1 5秒后自动关闭广告2 倒计时3 发送短信4 5秒之后自动跳转页面5 获取URL参数数据 1 5秒后自动关闭广告 <!DOCTYPE html> <html lang"en"> <head><meta …

管理系统的前端模板(vue2+Element UI)

目录 前言 一、模板展示图 二、获取的方式及操作运行步骤 &#xff08;一&#xff09;获取方式 &#xff08;二&#xff09;操作步骤 1.下载安装node.js 2.下载完成解压缩后在idea的里面打开终端。 3.输入下载相关依赖的命令 4.运行项目的命令 5.然后把给到的地址…

腾讯云渲染实战

UE使用流渲染技术的主要原因是为了提高渲染效率和降低成本。流渲染技术可以将渲染任务分配到多个计算节点上进行并行处理&#xff0c;从而加快渲染速度。同时&#xff0c;流渲染技术还可以将渲染任务分配到云端进行处理&#xff0c;减少本地计算机的负担&#xff0c;降低成本。…

又一科研利器诞生!能对话的论文阅读器,hammerScholar

文&#xff5c;智商掉了一地 hammerScholar 新升级&#xff0c;用对话式读论文工具提升科研生产力~ 不得不说&#xff0c;自从 AIGC 这个概念出现以来&#xff0c;它极强的内容理解与生成能力也推动着各种生产力工具层出不穷&#xff0c;除了一些浏览器和代码插件以外&#xff…

SpringBoot的Interceptor拦截器的简介和实际使用

拦截器&#xff08;Interceptor&#xff09; 概念&#xff1a;是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。Spring框架中提供的&#xff0c;用来动态拦截控制器方法的执行。 作用&#xff1a;拦截请求&#xff0c;在指定的方法调用前后&#xff0c;根据业务需要执行…

干货 | 关于等效电路图

等效电路图是电路原理中非常重要的一个概念&#xff0c;在电子工程、通信工程和电力工程等领域中经常被使用。等效电路图是指将一个复杂的电路简化成一个简单的电路&#xff0c;同时保持电路的等效性质&#xff0c;以便于分析和设计电路。在本文中&#xff0c;我们将详细介绍等…

回溯法 思想

回溯法&#xff08;back tracking&#xff09;&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标。但当探索到某一步时&#xff0c;发现原先选择并不优或达不到目标&#xff0c;就退回到上一…

ChatGPT安全性受质疑 国家网信办发布《生成式人工智能服务管理办法(征求意见稿)》

你是否曾经和一款人工智能对话&#xff1f;它们似乎能够理解你的问题&#xff0c;并给出令人满意的答案。ChatGPT是目前最流行的人工智能。它是由OpenAI开发的一款基于GPT技术的自然语言处理模型。 通过训练大量的文本数据&#xff0c;ChatGPT可以理解并回答用户的问题&#xf…

Excel vba直接调用斑马打印机进行打印代码

1.难点 1.1 vba 对zebra打印机调用方法open 1.2 zebra打印机默认支持UTF8 编码方式&#xff0c;对应编码命令为CI28; 支持GB2312 GB18030 ASCII码编码方式&#xff0c;对应编码命令为CI26 1.3 VBA对中文只支持GB2312, 而excel 是默认支持UTF8的&#xff0c; excel 与VBA编…

钛碳化铝(Ti3AlC2)在实验检测领域中的应用

钛碳化铝Ti3AlC2是一种属于MAX相&#xff08;M代表金属元素&#xff0c;A代表主族元素&#xff0c;X代表碳或氮&#xff09;的陶瓷材料。它是由钛、铝和碳组成的复合材料&#xff0c;拥有优异的力学、热学和电学性能。由于这些性质&#xff0c;Ti3AlC2已成为近年来研究和应用的…

[Netty源码] ByteBuf相关问题 (十)

文章目录 1.ByteBuf介绍2.ByteBuf分类2.1 AbstractByteBuf2.2 AbstractReferenceCountedByteBuf2.3 UnpooledHeapByteBuf2.4 UnpooledDirectByteBuf2.5 PooledDirectByteBuf 1.ByteBuf介绍 字节缓冲区, jdk NIO的ByteBuffer比较复杂, netty重新设计了ByteBuf用以代替ByteBuffe…

直方图实例详解(颜色直方图、灰度直方图)

直方图实例详解&#xff08;颜色直方图、灰度直方图&#xff09; 本篇目录&#xff1a; &#x1f984; 一、前言 &#x1f984; 二、直方图的概念 &#x1f984; 三、颜色直方图 &#xff08;1&#xff09;、颜色直方图定义 &#xff08;2&#xff09;、颜色直方图使用方法…

线程池中的拒绝策略

线程池中的拒绝策略 什么情况下出发拒绝策略? 当提交任务数大于corePoolSize的时候,会将多余任务缓存在workQueue阻塞队列中当阻塞队列满了,会扩充线程数当扩充线程数大于maximumPoolSize的时候,就会触发拒绝策略 也就是说,当任务数大于workQueue.size() 和maximumPoolSize…

同态随机基加密的量子多方密码-数学公式

众所周知&#xff0c;信息和信息处理的完全量子理论提供了诸多好处&#xff0c;其中包括一种基于基础物理的安全密码学&#xff0c;以及一种实现量子计算机的合理希望&#xff0c;这种计算机可以加速某些数学问题的解决。这些好处来自于独特的量子特性&#xff0c;如叠加、纠缠…