707.(力扣)设计链表 C++

1、题目描述

在这里插入图片描述

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

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

2、设计单链表

(1)这里是单链表的设计

class MyLinkedList {
public:
    //定义链表节点结构体
    struct listNode{
        int val;
        listNode*next;
        listNode(int x):val(x),next(nullptr){}
    };
    //初始化链表
    MyLinkedList() {
       dummyhead=new listNode(0);
       n=0;
    }
    //1、获取链表第index个节点的数值
    int get(int index) {
        if(index>n-1||index<0){
            return -1;
        }
        listNode*cur=dummyhead->next;
        while(index--){
            cur=cur->next;
        }
        return cur->val;
    }
    //2、在链表的最前面插入一个节点(关键在于顺序,或者调换顺序因为头结点可以存住,但是别的地方插入就不行了) 
    void addAtHead(int val) {
        listNode*tmp=new listNode(val);
        //相当于在虚拟头节点和真正的头结点之间插入一个节点,要对它的左右两边都进行改变
        tmp->next=dummyhead->next;//注意顺序
        dummyhead->next=tmp;
        n++;
    }
    //3、在链表的最后面插入一个节点
    void addAtTail(int val) {
        listNode*tmp=new listNode(val);
        listNode*cur=dummyhead;//用到cur是因为比在头结点插入的要多一步找到尾节点的步骤
        //不断遍历,直到找到最后一个节点
        while(cur->next!=nullptr){
            cur=cur->next;
        }
        cur->next=tmp;
        n++;
    }
    //4、在链表第index个节点前面插入一个节点
    void addAtIndex(int index, int val) {
        listNode*tmp=new listNode(val);
        listNode*cur=dummyhead;
        if(index>=0&&index<=n-1){
            while(index--){
            cur=cur->next;
        }
        tmp->next=cur->next;
        cur->next=tmp;
        n++;
        }
        if(index==n){
           addAtTail(val);
        }
}
    //5、删除链表的第index个节点
    void deleteAtIndex(int index) {
        if(index>=0&&index<=n-1){
            listNode*cur=dummyhead;
            while(index--){
                cur=cur->next;
            }
            cur->next=cur->next->next;
            n--;
        }

    }
    private:
    listNode*dummyhead;
    int n;
};

/**
 * 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);
 */

(2)在链表的第index个节点前面插入一个节点也可以写为
因为即使是最后一个节点,也有next节点,它的next节点是null

//4、在链表第index个节点前面插入一个节点
    void addAtIndex(int index, int val) {
        listNode*tmp=new listNode(val);
        listNode*cur=dummyhead;
        if(index>=0&&index<=n){
            while(index--){
            cur=cur->next;
        }
        tmp->next=cur->next;
        cur->next=tmp;
        n++;
        }
}

(3)在链表的最前面插入和最后面插入都可以用在Index插入来做

//2、在链表的最前面插入一个节点
    void addAtHead(int val) {
        addAtIndex(0,val);
    }
    //3、在链表的最后面插入一个节点
    void addAtTail(int val) {
        addAtIndex(n,val);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python:函数的形参与实参

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 函数基本概念 在Python中&#xff0c;函数是一种将代码封装以进行重复使用的机制。它们允许你定义一段代码&#xff0c;以便在程序的多个位置调…

城乡居民基本医疗信息管理系统|基于Springboot的城乡居民基本医疗信息管理系统设计与实现(源码+数据库+文档)

城乡居民基本医疗信息管理系统目录 目录 基于Springboot的城乡居民基本医疗信息管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、病例管理 2、医院资讯信息管理 3、医院资讯类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选…

Linux中防火墙相关操作

一、查看防火墙状态 可通过两种方式查看防火墙状态&#xff0c;一种通过systemctl命令&#xff0c;另一种是通过firewall-cmd命令。 1、systemctl status firewalld 2、firewall-cmd --state 二、关闭防火墙 1、暂时关闭&#xff1a;设置暂时关闭防火墙将会在下次重启系统后失…

学点Java打小工_Day4_Homework

1 统计数字 1 int[] scores{0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9}; 求出上面数组中0-9分别出现的次数 &#xff08;双重for循环&#xff09; Testpublic void solveProblem1() {int[] scores {0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,…

javaEE7

1. <% page pageEncoding"UTF-8"%><% page import"java.io.*"%> <% page import"java.util.*"%> <% page import"java.math.*"%> <html> <head><title>网站计数器</title></head&…

单例各样方式的写法

单例简介 特点 内存中只有一个实例&#xff0c;节约内存&#xff0c;无需频繁创建&#xff0c;减少性能开销&#xff0c;提高系统运行效率使用者无需关心类创建过程&#xff0c;整个项目中任何地方、任何时间开箱即用 缺点 单例模式没有抽象&#xff0c;扩展会有很大困难单例类…

LeetCode 热题 100 | 回溯(二)

目录 1 39. 组合总和 2 22. 括号生成 3 79. 单词搜索 菜鸟做题&#xff0c;语言是 C&#xff0c;感冒快好版 关于对回溯算法的理解请参照我的上一篇博客&#xff1b; 在之后的博客中&#xff0c;我将只分析回溯算法中的 for 循环。 1 39. 组合总和 题眼&#xff1a;c…

Vue.js+SpringBoot开发个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

c++入门你需要知道的知识点(上)

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a;c入门 主厨&#xff1a;邪王真眼 所属专栏&#xff1a;c专栏 主厨的主页&#xff1a;Chef‘s blog 前言&#xff1a; 咱也是好久没有更…

【实战】VMware17虚拟机以及Centos7详细安装教程

文章目录 前言技术积累VMware虚拟机的安装下载VMware安装文件VMware安装步骤VMware配置密匙 虚拟机中安装centos7准备工作创建虚拟机步骤1 自定义安装步骤2 硬盘兼容性步骤3 安装客户机操作系统步骤4 选择客户机操作系统步骤5 命名虚拟机步骤6 处理器配置步骤7 设置虚拟机内存步…

Django之Cookie

Django之Cookie 目录 Django之Cookie介绍Django操作Cookie设置Cookie浏览器查看Cookie 获取Cookie设置超时Cookie注销Cookie 模拟登录验证登录验证装饰器登录验证装饰器-升级版 介绍 当我们上网使用社交媒体或者购物时&#xff0c;浏览器需要通过一种方式来记住我们。想象一下…

构造函数、原型、instanceof运算符

通过构造函数创建对象 构造函数是学习面向对象的基础 任何函数都有原型对象 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

Linux--基本知识入门

一.几个基本知识 终端: CtrlAltT 或者桌面/文件夹右键,打开终端切换为管理员: sudo su 退出:exit查看内核版本号: uname -a内核版本号含义: 5 代表主版本号;13代表次版本号;0代表修订版本号;30代表修订版本的第几次微调;数字越大表示内核越新. 二.目录…

ADC架构I:Flash转换器

目录 简介 量化噪声模型 量化噪声模型 量化噪声与输入信号之间的相关性容易令人误解 SNR、处理增益和FFT噪底的关系 简介 接触ADC或DAC时您一定会碰到这个经常被引用的公式&#xff0c;用于计算转换器理论信噪比 (SNR)。与其盲目地相信表象&#xff0c;不如从根本上了解其…

单目测距+姿态识别+yolov8界面+车辆行人跟踪计数

yolov5单目测距速度测量目标跟踪&#xff08;算法介绍和代码&#xff09; 1.单目测距实现方法 在目标检测的基础上&#xff0c;我们可以通过计算物体在图像中的像素大小来估计其距离。具体方法是&#xff0c;首先确定某个物体的实际尺寸&#xff0c;然后根据该物体在图像中的像…

Linux编译器gcc/g++的功能与使用

一、程序的生成 首先&#xff0c;我们知道程序的编译分为四步&#xff1a; 1、预处理 2、编译 3、汇编 4、链接 1.1预处理 预处理功能主要包括头文件展开、宏定义、文件包含、条件编译、去注释等。 所谓的头文件展开就是在预处理时候&#xff0c;将头文件内容拷贝至源文…

【优选算法】专题1 -- 双指针 -- 移动零

前言: &#x1f4da;为了提高算法思维&#xff0c;我会时常更新这个优选算法的系列&#xff0c;这个专题是关于双指针的练习 &#x1f3af;个人主页&#xff1a;Dream_Chaser&#xff5e;-CSDN博客 一.移动零&#xff08;easy&#xff09; 描述&#xff1a; 「数组分两块」是⾮…

构建部署_Docker常用命令

构建部署_Docker常见命令 启动命令镜像命令容器命令 启动命令 启动docker&#xff1a;systemctl start docker 停止docker&#xff1a;systemctl stop docker 重启docker&#xff1a;systemctl restart docker 查看docker状态&#xff1a;systemctl status docker 开机启动&…

Netty网络编程(一)

Netty网络编程&#xff08;一&#xff09; 如何进行网络通信 Socket通信是进程通讯的一种方式&#xff0c;通过调用这个网络库的一些API函数可以实现分布在不同主机的相关进程之间的数据交换 网络编程的基本流程是什么&#xff1f; 服务端先创建socket套接字&#xff0c;然后用…

HarmonyOS 非线性容器特性及使用场景

非线性容器实现能快速查找的数据结构&#xff0c;其底层通过 hash 或者红黑树实现&#xff0c;包括 HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray 七种。非线性容器中的 key 及 value 的类型均满足 ECMA 标准。 HashMap HashMap 可用来存…
最新文章