【数据结构】链表头插,尾插,删除,插入,有序合并-模板代码

【数据结构】链表头插,尾插,删除,插入,有序合并-模板代码

文章目录

  • 【数据结构】链表头插,尾插,删除,插入,有序合并-模板代码
    • 1. 头插法
    • 2. 尾插法
    • 3. 删除
    • 4. 插入单个节点
    • 5. 有序链表合并

在数据结构中,单链表是一种常见的线性数据结构,它由一系列的节点组成,每个节点包含两部分:数据和指向下一个节点的指针。对于链表,我们可以进行以下操作等:

创建、插入、删除、查找、遍历、反转、连接、复制、排序…

以下是每一个链表的元素:

struct Node{int data;Node* next=nullptr;Node(int x):num(x){}Node(){}
};

1. 头插法

下面是插入第一个元素的过程:

在这里插入图片描述

下面是插入第二个元素的过程:

在这里插入图片描述

注意点:

  • 头插法中,head位置不变,每一次插入的时候插入点都在head的正后面,并且之前的元素都会往后推
  • 不能用数组的角度来考虑链表,这里只需要连接起来,不需要全部都循环往后挪
  • 注意好①和②的顺序
  • 注意好插入之后元素的顺序

以下是代码的实现:

// head没有值,示例代码以此为参考
void AddHead(Node* head, int x)  
{  Node* add=new Node(x); add->next=head->next;head->next=add;
}
// head有值
void AddHead(Node* head, int x)
{Node* add = new Node(x);add->next = head;head = add;
}

2. 尾插法

这是第一个元素插入的过程:
在这里插入图片描述

这是第二个元素插入的过程:

在这里插入图片描述

注意点:

  • 尾插法中,每一个插入时都是在最后尾巴的位置插入再接入空指针
  • 我们可以定义一个指针来记录尾巴,但用循环来查找会更清晰明了,这里用循环来查找尾
  • 注意好插入之后元素的顺序

以下是代码的实现:

void AddRear(Node*head, int x)
{Node* last=new Node(x); Node* index=head;while(index->next!=nullptr){index=index->next;}index->next=last;
}

3. 删除

链表的操作最容易犯错的就是把链表当作数组来对待,以为对中间元素进行操作就要影响后面所有的元素,其实我们把他们连起来就行了,不需要像数组或者顺序表那样将后面元素都往后挪或者往前挪之类的。根据上面的可视化过程,我们可以知道链表的删除操作:

//i为删除位置,可以根据自己选择修改为逻辑位置或是下标位置
void LL_del(int i)
{if (i > len || i < 1){//越界操作}Node* index = head;while (i--){index = index->next;}index = index->next;
}

4. 插入单个节点

以下是链表插入的示例代码,切记不要像数组一样将后面元素全部往后移,我们只需要连起来就行了,插入单个节点的方法可以参照头插法,只需要将前面一大部分当作头节点行了:

void LL_insert(int i, int item)
{if (i > len + 1 || i < 1){//越界操作}Node* index = head;i--;while (i--){index = index->next;}Node* add = new Node(item);add->next = index->next;index->next = add;
}

5. 有序链表合并

int LL_merge(Node* headA, Node* headB)
{Node* resultHead = new Node; // 创建一个新链表用于存放合并结果Node* index = resultHead;Node* pa = headA->next;Node* pb = headB->next;while (pa != nullptr && pb != nullptr){if (pa->data < pb->data){index->next = pa;pa = pa->next;}else{index->next = pb;pb = pb->next;}index = index->next;}// 处理剩余部分if (pa != nullptr){index->next = pa;}if (pb != nullptr){index->next = pb;}// 更新La的头指针,使其指向合并后的链表headA->next = resultHead->next;
}

以上代码需结合实际题目考虑

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的Qt作品(19)使用Qt写一个轻量级的视觉框架---第2章,实现思维导图方式的流程图运行

上一章介绍了主界面的设计。本篇是第2章&#xff0c;主要介绍流程图的运行。 本作品采用的是QtOpenCV组合方式开发。流程图的设计思想其实就是数据结构的【图】。通过遍历每个节点来实现各个算法。 1、先看看流程图的设计 目前的工具箱支持【采集】和【处理】两个部分。 采集…

中国又一利器”遥遥领先″?纳米RAM市场增长趋势正式超越美国!

纳米RAM是一种前沿的存储技术&#xff0c;利用纳米级工艺技术制造而成&#xff0c;具有极高的存储密度和读写速度。相较于传统的RAM技术&#xff0c;纳米RAM具有更高的可靠性、更低的能耗以及更强的耐久性。这些优势使得纳米RAM成为未来高密度存储和高速计算领域极具潜力的技术…

企业架构LNMP学习笔记49

Redis数据持久化操作&#xff1a; 数据、持久化&#xff08;数据在服务或者软件重启之后不丢失&#xff09;。 如果数据只存储在内存中&#xff0c;肯定会丢失&#xff0c;实现持久化&#xff0c;就需要把数据存储在磁盘中&#xff08;hdd ssd&#xff09;。 memcached在宕机…

Apache Hive 入门

目录 一、Apache Hive概述 1.1 什么是Hive ​1.2 为什么使用 Hive 1.3 Hive 和 Hadoop 关系 二、场景设计&#xff1a;如何模拟实现Hive功能 2.1 如何模拟实现 Apache Hive 的功能 2.2 映射信息记录 2.3 SQL 语法解析、编译 2.4 最终效果 ​三、Apache Hive 架…

openGauss学习笔记-74 openGauss 数据库管理-创建和管理视图

文章目录 openGauss学习笔记-74 openGauss 数据库管理-创建和管理视图74.1 背景信息74.2 管理视图74.2.1 创建视图74.2.2 查询视图74.2.3 查看某视图的具体信息74.2.4 删除视图 openGauss学习笔记-74 openGauss 数据库管理-创建和管理视图 74.1 背景信息 当用户对数据库中的一…

机器学习练习-决策树

机器学习练习-决策树 代码更新地址&#xff1a;https://github.com/fengdu78/WZU-machine-learning-course 代码修改并注释&#xff1a;黄海广&#xff0c;haiguang2000wzu.edu.cn 1&#xff0e;分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if…

万象奥科参展“2023 STM32全国巡回研讨会”—武汉站

9月13日&#xff0c;万象奥科参展“2023 STM32全国巡回研讨会”— 武汉站。此次STM32研讨会将会走进全国11个城市&#xff0c;展示STM32在智能工业、无线连接、边缘人工智能、安全、图形用户界面等领域的产品解决方案及多样化应用实例&#xff0c;深入解读最新的产品技术、解决…

Spring 工厂

目录 一、Spring 工厂创建复杂对象 1、什么是复杂对象 2、 Spring 工厂创建复杂对象的 3 种方式 &#xff08;1&#xff09;FactoryBean 接口 开发步骤&#xff1a; 细节&#xff1a; FactoryBean 的实现原理[简易版] Factory Bean 总结 &#xff08;2&#xff09;实例…

YOLOv5:修改backbone为ConvNeXt

YOLOv5&#xff1a;修改backbone为ConvNeXt 前言前提条件相关介绍ConvNeXtYOLOv5修改backbone为ConvNeXt修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作&#xff0c;方便自己查阅。由于本人水平有限&#xff0c;难免出现错漏&#xff0c…

Linux搭建Apache(秒懂超详细)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

【Linux】线程池 | 自旋锁 | 读写锁

文章目录 一、线程池1. 线程池模型和应用场景2. 单例模式实现线程池(懒汉模式) 二、其他常见的锁1. STL、智能指针和线程安全2. 其他常见的锁 三、读者写者问题1. 读者写者模型2. 读写锁 一、线程池 1. 线程池模型和应用场景 线程池是一种线程使用模式。线程过多会带来调度开…

js实现websocket服务端和客户端

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…