数据结构系列——链表linklist

2023-11-17

本期主题:
数据结构之——链表


往期链接:



1.链表定义

定义:

链表由多个结点组成,结点不仅包含值,还包含到下一个结点的信息,所以通过这种方式,就将数据组合了起来,看起来就像一条链;

在这里插入图片描述

用C++的典型表示方式如下:

// Definition for singly-linked list.
struct SinglyListNode {
    int val;
    SinglyListNode *next;
    SinglyListNode(int x) : val(x), next(NULL) {}
};

2.代码实现链表

实现几点:

  • get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1;
  • addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点;
  • addAtTail(val):将值为 val 的节点追加到链表的最后一个元素
  • addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
  • deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。

code:

struct node {
    int val;
    struct node *next;
    node() {}
    node(int x) :val(x), next(NULL){}
};

class MyLinkedList {
public:
    struct node *cur; //当前结点
    MyLinkedList() {
        head = new node(NULL);
        head->next = NULL;
        size = 0;
    }

    int get(int index) {
        if (index >= size)
            return -1;
        cur = head;
        while (index--) {
            cur = cur->next;
        }
        return cur->val;
    }

    void addAtHead(int val) {
		cur = new node(val);

        if (size != 0) {
			//非第一个结点,将目前的head作为cur->next
			cur->next = head;
        }
		head = cur;
        size++;
    }

    void addAtTail(int val) {
        int tmp_size = size;
        cur = head;
        while ((--tmp_size) && (tmp_size > 0)) { //找到最后一个结点
            cur = cur->next;
        }
        struct node *tmp_cur = new node(val);
		// if (size == 0) //无头结点情况
		// {
			// addAtHead(val);
		// } else {
			// cur->next = tmp_cur;
		// }
		if (size == 0)
		{
			head = tmp_cur;
		} else {
			cur->next = tmp_cur;
		}
        size++;
    }

    void addAtIndex(int index, int val) {
        if (index > size)
            return ;
		else if (index == size)
			addAtTail(val);
        else if (index <= 0)
            addAtHead(val);
        else {
            cur = head;
            while ((--index) && (index > 0)) {
                cur = cur->next;
            }
            struct node *new_node = new node(val);
            new_node->next = cur->next;
            cur->next = new_node;
			size++;
        }

    }

    void deleteAtIndex(int index) {
        if ((index < size) && (index > 0))
        {
            cur = head;
            while ((--index) && (index > 0)) {
                cur = cur->next;
            }
            size--;
            //非空
            if (size > 0) {
			    cur->next = cur->next->next;
            } else {
                head = new node(NULL);
                head->next = NULL;
				size = 0;
            }
			
        } else if (index == 0) {
			head = head->next;
			size--;
		}
        else
            return;

    }
private:
    struct node *head; //头结点
    int size; //表明链表长度
};


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

数据结构系列——链表linklist 的相关文章

  • 神经网络调优 --- batch_size

    batchsize和收敛速度 性能的关系 一般来说 在合理的范围之内 越大的 batch size 使下降方向越准确 震荡越小 小的 bath size 引入的随机性更大 单次epoch耗时更久 且震荡大难以收敛 但大的batchsize容

随机推荐

  • SQL注入漏洞简介、原理及防护

    目录 1 SQL注入漏洞简介 2 SQL注入漏洞原理 3 SQL注入的分类 4 注入方法 5 SQL注入危害 6 SQL注入防护措施 1 SQL注入漏洞简介 SQL注入漏洞是Web层面最高位的漏洞之一 所谓SQL注入 就是通过把SQL命令插
  • Ubunto18.04安装完成后没有gcc、make、g++、无法访问域名等解决方法

    Ubunto18 04安装完成后没有gcc make g 无法访问域名等解决方法 今天新安装完虚拟机后又安装了Ubunto 然后就碰到了个恶心的事情 就是这是个纯净版 里面好多东西都没有 没有gcc make等等 按照其他博主的方法都不好使
  • 本地电脑与阿里云服务器之间实现文件传输

    文章目录 1 文件传输 1 1 服务器使用本地文件 1 2 使用FileZilla软件 1 2 1 服务端配置 1 2 2 客户端配置 1 2 3 问题及解决 1 2 3 1 bug 1 2 3 2 原因 1 2 3 3 解决 1 2 3
  • 解决“ warning C276: constant in condition expression“和“warning C294: unreachable code“两个告警提示

    好久不见 最近因为一些项目比较忙 都没怎么发文章了 今天有空就来分享一下自己之前遇到的两个告警 告警信息 首先 我们先来看一下这两个告警 第一个告警为 warning C276 constant in condition expressio
  • Go Web编程实战(3)----数据类型

    目录 前言 布尔型 数字类型 字符串类型 使用 byte修改 使用 rune修改 指针类型 指针的简单用法 修改指针值 复合类型 数组类型 结构体介绍 切片类型 从指定范围生成切片 重置切片 直接声明切片 Map 前言 Go语言数据类型包括
  • 设置idea控制台打印的日志输出到本地文件

    在idea的控制台很难看到日志 很快速的就刷过去了 而且日志多的话 很多就看不到了 所以我设置了一下idea把日志输出到文件 方便查看 1 在idea的菜单栏 找到这个向下的三角 点击 选择Edit Configurations 2 在打开
  • 官宣!玖章算术获评“浙江省创新型中小企业”

    近日 浙江省工业和信息化厅开展了 2023 第二季度创新型中小企业评价工作 经企业自评 地市审核 抽查 市经信局审核评价等程序 玖章算术以优秀的自主创新能力通过认定 成为浙江省 2023 年度创新型中小企业 创新型中小企业 是指具有较健全的
  • FISCO BCOS(五)———部署安装jdk1.8

    1 将下载的jdk1 8 0 162 linux x64 tar gz通过远程连接工具 放入 usr local 目录 然后解压 2 解压 tar zxvf jdk1 8 0 162 linux x64 tar gz 3 切换到jdk1 8
  • 闲聊——集成学习理论(Adaboost,随机森林理论与个人实战中的体会)

    本文通过简单的例子来引出算法本质 同时附上证明过程 目的是让感觉直接看证明推导很难的小伙伴们也能理解集成算法是怎样实现的 集成学习通过构建并结合多个学习器来完成学习任务 可获得比单一学习器更好的泛化性能 目前的集成学习方法大致可分为两类 第
  • 程序员常用十大算法之KMP算法

    程序员常用十大算法之KMP算法 一 应用场景 二 暴力匹配算法 2 1思路分析 2 2代码实现 三 算法介绍 四 KMP算法最佳应用 4 1字符串匹配问题 4 2思路分析图解 代码实现 本文是程序员常用十大算法的第一节 后面的算法总结都在博
  • JSON 驼峰转下划线

    import com fasterxml jackson databind PropertyNamingStrategy PropertyNamingStrategyBase public class MyCamemlToUnderline
  • MAC DOCKER无法ping通容器解决方案

    原因 解决方案 原因 先来看下LINUX的docker架构 docker是在linux内核容器基础上实现的 linux安装docker后 会创建一个为docker0的虚拟网卡 linux宿机与docker容器之间的通信 通过docker0虚
  • 高三计算机教案,2017高三信息技术教学计划

    信息技术是一门操作性和实践性强的课程 应注重培养学生的动手操作实践能力 提高学生的学习兴趣 达到学习的目的 下面是学习啦小编带来关于2017高三信息技术教学计划的内容 希望能让大家有所收获 2017高三信息技术教学计划 一 一 基本情况 1
  • violate关键字---java高并发

    内存模型相关概念 计算机在执行程序时 每条指令都是在CPU中执行的 而执行指令过程中 势必涉及到数据的读取和写入 由于程序运行过程中的临时数据是存放在主存 物理内存 当中的 这时就存在一个问题 由于CPU执行速度很快 而从内存读取数据和向内
  • origin账户申请&&安装使用——画图软件

    账户申请 参考https my originlab com forum topic asp TOPIC ID 22328 学生半年免费版官方网站申请链接 用学校提供的以edu cn结尾的邮箱进行注册 https www originlab
  • const的用法

    const是一个关键字 加在变量前 将其声明为常量 简单来说 就是不希望该变量的值发生改变 因此 它必须在声明该变量时就赋初值 const与指针 如果const加在 符号前面 如 const int p a 或 int const p a
  • PHP性能优化--OPCache

    文章目录 前言 OPcache 介绍 启用 配置项说明 opcache preload预加载文件示例 删除缓存 可视化界面opcache gui 总结 参考资料 前言 随着业务的发展 性能优化成为了不可避免的课题 优化后的业务承载能力可以是
  • sh 脚本异常:/bin/sh^M:bad interpreter: No such file or directory

    权限不够 chmod x examples mnist bb sh 在 Linux 中执行 sh 脚本 异常 bin sh M bad interpreter No such file or directory 这是不同系统编码格式引起的
  • Spring不同类型的注入方式,p-namespace,c-namespace

    spring官网代码示例 1 不同类型的注入方式
  • 数据结构系列——链表linklist

    本期主题 数据结构之 链表 往期链接 数据结构系列 先进先出队列queue 数据结构系列 栈 stack 目录 1 链表定义 2 代码实现链表 1 链表定义 定义 链表由多个结点组成 结点不仅包含值 还包含到下一个结点的信息 所以通过这种方