链表

数据结构之链表 数据结构之链表 链表以线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表的插入和删除操作可以达到O(1)的复杂度。而链表有指向性可以分为单向链表和双向链表。 单向链表(单链表)是链表的一种,它由节点组成,每个节点都包含下一个节点的指针,下图就是一个单链表。 可以由图看出,链表中每个节点都指向下个节点。一般在设置链表时,头节点我一般会设成空节点。 在编写单向链表时,我一般会这样设置链表节点的结构体。 // 定义链表结构体 typedef struct L 阅读详情

链表(链式存储的线性表)

1.为啥使用链表
1.顺序表空间浪费,扩容后有不用的空间浪费了
2.内存往往没有能力提供较大的连续空间
2.定义:
1.数据存储在节点中
节点。某个属性=数据
2.节点存储下一个节点的位置信息(引用)
用户x 存y的引用 =>x=y
节点。某个属性=下一个节点
表示链表时,用第0个节点即可

3.单向链表

1.特点:
节点包含两个域:元素域,下一个节点链接域
2.单链表头部添加 O(1)
防止破坏原有链表,先操作新节点,在操作原有节点
1.新节点的next指向原首节点
2.head 指向新节点
3.单链表尾部添加 O(n)
1.若链表为空 则直接头部添加
否则:
1.遍历查询尾节点cur
2.cur的next 指向新节点
4.单链表任意位置添加
若待插入位置小于等于0则头部添加
若带插入位置大于等于长度,则尾部添加

否则:
1.遍历查找待查的前一个节点 cur
2.新节点的next 指向cur 的下一个节点
3.cur的next 指向新节点
5.单链表删除
1.查找待删节点cur 并记录前一个节点pre
2.若前一个节点存在,则pre 的next 指向cur 的nextO(n)
否则 head 指向cur 的next O(1)

4. 双向链表

1.特点:
节点包含三个域:一个元素域,两个链接域(前继和后继)
第0个节点没有前躯,最后一个没有后继
在单链表的基础上,增加向前指向的考虑
2.头部添加O(1)
1.新节点的next 指向原首节点
2.原首节点存在的话,指向新节点
3.head 指向新节点
3.尾部添加O(n)
若链表为空,则直接头部添加
否则:
1.遍历查询尾节点
2.将尾节点的next 指向新节点
3.将新节点指向原尾节点
4.任意位置添加
如果待添加位置小于等于0,则在头部添加
如果待添加大于等于长度,则在尾部添加
否则:
1.遍历查询待插入位置的前一个节点cur
2.将新节点的next 指向cur 的next
3.将cur 的next 指向新节点
4.将新节点指向cur
5.将cur 的next 指向新节点
5.删除节点
1.查找待删节点cur
2**.若cur 有前驱结点**,将cur 的前驱节点指向cur 的next O(n)。
否则head 指向cur的后继节点O(1)
3 . 若cur 有后继节点,将cur 的前驱节点指向cur的后继节点

5.单向循环链表

1.特点:
节点包含两个域:元素域和链接域(下一个节点)
尾节点的next 指向第0个节点
当链表只有一个节点时,自己的next 指向自己
基于单链表的基础上,增加考虑首节点和尾节点的情况
2.循环链表遍历:
1.遍历结束条件:next == head
2.若链表为空,则不能遍历
3.循环退出时,尾节点还未访问

def travel(self):
if self.is_empty():
  return
 cur = self.head
 while = cur.next != cur.head
   print(cur.item end = ">")
   cur = cur.next
   至此,cur 指向尾节点,cur 本身还未打印
   print(cur.item)
   

3.循环链表头部添加
若找不到尾节点(链表为空):head 指向新节点,新节点next指向自己
否则:
1.遍历查找尾节点
2. 新节点的next指向原首节点
3.head 指向新节点
4.尾节点next指向新节点
4.循环链表尾部添加
若链表为空,则直接头部添加
否则:
1.遍历查询尾节点
2.将尾节点的next 指向新节点
3.将新节点指向首节点
5.循环链表任意位置添加
若待插入位置小于等于0则头部添加
若带插入位置大于等于长度,则尾部添加
否则:
1.遍历查找待查的前一个节点 cur
2.新节点的next 指向cur 的下一个节点
3.cur的next 指向新节点
6.循环链表删除
若链表为空,则直接返回

1.查找待删节点cur 并记录前一个节点pre
2.若前一个节点存在 则pre 的next 指向cur 的next O(n)
否则 1.遍历查找尾节点
2. head 指向cur 的next
3. 尾节点指向首节点
3.判断尾节点是否是待删节点
若有前一个节点,则pre 的next 指向cur 的next
否则(待删节点是唯一节点) head 指向None O(n)

链表详解(单链表、双向链表、链表逆序) 单链表 想了解单链表的一些概念可以看我另一篇博客: 链表基础 单链表结构体定义 //单链表的结构定义 typedef struct LNode { int data; //data存放结点数据域 struct LNode *next; //指向后继结点的指针 }LNode; 单链表的建立 (1)定义单链表的数据结构; (2)读取数据; (3)生成新结点; (4)将数据存入结点的成员变量中; (5)将新结点连接到表头或表尾。 重复(2)~(5)直到输入结束。 //头插法建立单链表 void c 阅读详情

相关推荐

C++实现单向链表,双向链表,单向环形链表,双向环形链表

本文讲解了链表的四种类型以及数据结构,同时给出了四种链表的C++代码实现。

ttug22的博客 1382

链表的.next指向问题

这是在leetcode上做的一道链表题,有时候会不懂到底 .next 指的是。像这样,左边不带 .next 的是类似于赋值语句,自己的指针指向右边位置。这种就代表等号左边指向右边,左边的是指向,右边就代表确切的下一个节点。

YangYoung_的博客 5934

LWIP的pcb-〉next 指向pcb自身死机问题解决方法.doc

关于LWIP的pcb->next 指向pcb自身,造成死机问题解决方法.LWIP版本1.4.1。亲测可用,完美解决LWIP的pcb->net指向自己死机问题;

【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记

一、单向循环链表 将单链表的首尾节点相连就形成了单向循环链表。 1、单向循环链表的节点 2、单向循环链表的结构 单向循环链表只有一个节点时: 二、双向循环链表 1、双向循环链表示意图 2、双向循环链表节点设计 struct d_node{ int data; //数据域 struct d_node *next; struct d_node *prev; }; 3、双向循环链表的一般性结构 1)只有头结点的情况 2)有多个节点的情况 4、双向循环链表头插法插入节点 步骤: 1)p-&

皮皮不调皮的博客 9601

解决RK3566 USB OTG模式识别问题:从原理图分析到otg_mode文件操作全解析

本文深入解析RK3566 USB OTG模式识别问题,从硬件原理图设计到Linux内核的otg_mode文件操作,提供全面的调试方案。针对USB_OTG0_ID引脚电路设计、电源管理关联及内核驱动交互等关键点,给出实战调试技巧和常见问题解决方案,帮助开发者高效解决USB OTG模式切换难题。

eee77的博客 866

异步fifo的UVM验证(最终最终版)

更新了refmdl以及scb

qq_44674008的博客 2987

为什么链表P->next指向下一个节点

我的理解:递归调用,它在结构体里面定义了一个指针,但这个指针又指向由这个结构体定义的下一个变量。通过指针就可以找到地址它在结构体里定义了一个指针,但是这个指针又指向由这个结构体定义的下一个变量。通过指针就可以找到地址。循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。①循环链表中没有NULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p或p->n...

ArrowYL的博客 7079

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1238

数据结构:链表(单链表)

数据结构:链表(单链表)介绍

m0_57781912的博客 361

微信小程序转化数据API自归因实战:PHP实现与2025升级要点解析

本文详细解析了2025年微信小程序转化数据API自归因的升级要点与PHP实战实现。核心变化包括接口地址更新、固定access_token的获取方式,以及新增timestamp与nonce等安全参数。文章提供了完整的PHP代码示例,帮助开发者高效完成数据上报,优化腾讯广告投放效果。

git9versioner的博客 989

AI Agent开发第49课-DIFY让AI自动预约排班后发企业微信通知-MongoDb-Redis-企业微信调用

我们的Dify会讲得很透彻,坚持喂饭级教程,从一个基本的AI自动预约客户到自动记录客户的信息再到自动判断下一步如何走全部是AI化的,这是一个真正的AI原生应用,它来自于我的一个大型物业公司用AI自动预约系统中的一部分。我们会使用这个预约流做完整的Dify例子来讲完,因为它太有代表性了。工作流中的控制反转、AI决策下一步怎么走、人为干涉、用户行为判断、外部中间件如Redis,今天我们就要讲到在Dify中调用MongoDB的数据以及企业微信通知来作为预约派单的最后一步了。

打造全国最全的AI Agent开发知识领域的博客 1753

【Leetcode】反转链表 合并链表 相交链表 链表的回文结构

【Leetcode】反转链表 合并链表 相交链表 链表的回文结构

旋律 | 话语 | 色彩 | 情景 2382

【PointNet++】使用Open3D对分割后的结果可视化

PointNet++中的局部分割网络预测后是没有可视化文件的,所以需要自己通过编写Open3D或者PCL点云算法去可视化,在本人经过查找翻阅修改后,实现了网络输出点云分割后结果的可视化。已实现推测单个点云,并可视化。

纵马踏花向自由 2453

数据结构 —— java 单链表、双端链表、双向链表、无序链表、有序链表

文章目录链表不同链表的特点单链表(单端链表)双端链表双向链表 链表 上面是一个单链表的存储原理图,head为头节点,它不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null。 不同链表的特点 普通链表: 节点类保留下一节点的引用。链表类只保留头节点的引用,只能...

猎人在吃肉 4536

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2054

DeepSeek掘金——用DeepSeek模型构建AI 代理

在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。人工智能领域正在迅速发展,DeepSeek 的模型代表了智能 AI 代理开发的重大进步。在本综合指南中,我们将探讨如何利用 DeepSeek 的功能构建能够以有意义的方式理解、推理和交互的复杂 AI 代理。

3858

数据结构01- 单链表、双端链表、双向链表、无序链表、有序链表

数据结构01- 单链表、双端链表、双向链表、无序链表、有序链表 0、节点 节点 是数据结构中的基础,是 构成复杂数据结构的基本组成单位。 public class Node { public long data; public Node next; public Node(long value) { this.data = value; } } 1、链表的定义 链表: 通常由一连串 节点 组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向 上一个 或 下一个

琦彦 7073

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LeetCode链表(链表操作,反转链表,奇偶链表,排序链表)

本篇文章更注重于链表自身的特点。链表是一种通过指针串联在一起的线性结构。链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。链表的入口节点称为链表的头结点也就是head。(1)单链表每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。(2)双链表每一个节点有两个指针域。

ji_meng的博客 1820

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数据结构之链表操作详解与示例(反转链表,合并链表,旋转链表,对链表排序)

本文介绍了链表的四种常见操作:反转链表、合并链表、旋转链表和对链表排序。每种操作都有其特定的应用场景和算法步骤,通过示例代码展示了如何实现这些操作。理解和掌握这些链表操作对于深入理解数据结构和算法至关重要。

qq_35320456的博客 1346

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

详解链表oJ<反转链表,链表的中间节点及链表的回文>

链表OJ

qq_75270497的博客 1039

链表小总结

/ 结点的值int val;// 下一个结点// 节点的构造函数(无参)// 节点的构造函数(有一个参数)// 节点的构造函数(有两个参数)

m0_58257626的博客 1660

链表基础知识+移除链表元素+设计链表+反转链表

接下来说一说链表的定义。链表节点的定义,很多同学在面试的时候都写不好。这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定义的。而在面试的时候,一旦要自己手写链表,就写的错漏百出。这段代码定义了一个名为 `ListNode` 的类,它通常用于在Python中创建和操作链表。链表是一种线性数据结构,其中每个元素(通常称为节点)包含一个值和一个指向下一个节点的引用。

weixin_43710382的博客 1826

反转链表、旋转链表算法总结

1. 反转链表(力扣:206) 2. 反转链表 II(力扣:92) 3. 旋转链表(力扣:61)

卜大爷的博客 2万+

链表学习反转链表

链表是一种线性数据结构,其中元素不是连续存储在内存中的,而是通过指针连接起来。每个节点包含两部分:数据域和指向下一个节点的指针域。链表分为单向链表和双向链表,本文主要讨论单向链表的反转。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1247
上一篇: 数据结构以及顺序表
下一篇: talib/_ta_lib.c:526:28: fatal error: ta-lib/ta_defs.h: 没有那个文件或目录
PyTtCcMm
博客等级 码龄8年 21粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值