可视化+图解:轻松搞定链表

链表(Linked list)是一种常用的数据结构,它由一系列节点组成,每个节点包含数据域指针域。指针域存储了下一个节点的地址,从而建立起各节点之间的线性关系。

1、链表节点

1.1 节点构成

链表节点如下图所示:

其中,数据域可以是一个int、string、float或者数组等复杂结构。

1.2 节点表示

1.2.1 Golang语言

Go语言中的数据类型可以分为四大类:基础类型、聚合类型、引用类型和接口类型。

基础类型是构成编程语言的基础元素,包括整数、浮点数、布尔值和字符串等。在Go语言中,整型分为有符号和无符号整数,例如int8、int16、int32、int64等。此外,Go语言还支持基于架构的类型,例如uintptr。

聚合类型是由基础类型构成的复合数据类型,主要包括数组和结构体两种。数组由一组相同类型的元素组成,长度固定;结构体则由一组不同类型的元素(字段)组成,长度也是固定的。

引用类型是对底层数据进行抽象表示的类型,包括指针、切片、映射(也称为map)、函数和通道(channel)。指针提供了对底层变量的间接访问方式,切片是对数组的抽象,映射是一种关联数组,函数和通道则是特殊的引用类型,用于表示执行代码和传输数据。

接口类型是Go语言中的一种特殊类型,它定义了一组方法(函数),但是这些方法不包含(实现)代码。任何其他类型只要实现了这些方法就可以被看作是这个接口类型的实例。

因此,对于 Golang语言来说,只有结构体才可以表示链表的节点。

// ListNode 定义链表节点
type ListNode struct {Val  int       //链表的数据域Next *ListNode //链表的指针域
}

1.2.2 Java语言

基本数据类型:包括整型(byte、short、int、long)、浮点型(float、double)、字符型(char)和布尔型(boolean)。

引用数据类型:包括类(class)、接口(interface)、数组(array)和枚举(enum)。

特殊数据类型:包括void、String、Object等。

因此,对于 Java语言来说,只有类(class)才可以表示链表的节点。

//定义链表节点static class ListNode {private int val;  //链表的数据域private ListNode next; //链表的指针域
​public ListNode(int val) {this.val = val;this.next = null;}
​}

1.2.3 Python语言

Python语言中有几种主要的数据类型,包括: 数字:Python可以处理整数(int)、浮点数(float)、复数(complex)。 字符串:字符串是Python中的文本数据类型,由零个或多个字符组成。 布尔值:布尔值是Python中的逻辑数据类型,有两个可能的值:True和False。 列表:列表是Python中的有序集合,可以包含任意类型的数据项。 元组:元组与列表类似,是有序的集合,但是元组是不可变的,这意味着你不能更改元组中的元素。 集合:集合是无序的、不重复的元素序列。 字典:字典是无序的键值对集合,键是唯一的。 None:None是一个特殊的类型,表示空或没有值。 自定义类和对象:Python允许用户定义自己的数据类型,即类。对象是类的实例。

因此,对于 Python语言来说,只有自定义类才可以表示链表的节点。

#定义链表节点
class ListNode:def __init__(self, data):self.val = data  # 链表的数据域self.next = None  # 链表的指针域

2、新建链表

创建链表代码实例如下:

  • go代码:

    head := &ListNode{Val: 1}

    java代码

  • ListNode head = new ListNode(1);

    Python代码

  • head = ListNode(1)

    生成的链表结构如下图所示:

创建了一个链表,该链表只有一个节点,数据域的值为1,指针域指默认指向为Null。创建的链表只有一个节点,通过变量head指向它,后续就可以通过head变量来操作此链表了。

3、链表添加节点

原链表结构如下图所示:

给链表添加一个节点的代码实例如下:

  • go代码:

    head.Next = &ListNode{Val: 123} //更改原链表节点的指针域,让它指向一个新的节点

    java代码

  • head.next = new ListNode(123); //更改原链表节点的指针域,让它指向一个新的节点

    Python代码

  • head.next = ListNode(123)  # //更改原链表节点的指针域,让它指向一个新的节点

    添加节点之后,链表结构如下所示:

原链表节点head的指针域next从指向Null改为指向123这个节点了。

如果要在链表默认增加2个节点,可以这样操作:

  • go代码:

    head.Next.Next = &ListNode{Val: 456} //给head 指针变量指向节点的 下下节点 添加节点
    head.Next.Next.Next = &ListNode{Val: 789}

    java代码

  •  head.next.next = new ListNode(456);  //给head 指针变量指向节点的 下下节点 添加节点head.next.next.next = new ListNode(789);

    Python代码

  • head.next.next = ListNode(456)  # 给head 指针变量指向节点的 下下节点 添加节点
    head.next.next.next = ListNode(789)

    添加2个节点之后,链表结构如下所示:

4、链表节点删除

链表结构如下所示:

如果要删除数据域为456、789的这样的两个节点,可以如下操作:

  • go代码:

    head.Next.Next = nil           // 通过head指针变量操作链表的指针域:截断链表

    java代码

  • head.next.next = null;  // 通过head指针变量操作链表的指针域:截断链表

    Python代码

  • head.next.next = None  # 通过head指针变量操作链表的指针域:截断链表

    删除节点之后,链表结构如下所示:

经过操作系统的GC(Garbage Collection,垃圾收集器。用于自动管理内存并回收不再使用的对象所占用的资源)对不用的节点进行回收之后,链表结构如下图所示。

5、小结

今天对链表的基本操作进行了说明,其实还有很多需要加以了解的内容,如:链表打印、对链表的操作进行封装(操作链表更方便)等,鉴于篇幅的限制,再次就不展开了。

如果以上文字描述的不是很清楚或者想进一步了解链表相关操作,请参考视频详细讲解。

       Python编码实现:哔哩哔哩_bilibili

       Java编码实现:数据结构笔试面试算法-Java语言版_哔哩哔哩_bilibili

       Golang编码实现:哔哩哔哩_bilibili

对于链表的相关操作,我们总结了一套【可视化+图解】方法,依据此方法来解决链表相关问题,链表操作变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:雄关漫道真如铁,而今迈步从头越。

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

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

相关文章

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…

C# 在Excel中插入和操作切片器-详解

目录 使用工具 C# 在Excel中插入切片器 插入切片器到透视表 插入切片器到表格 C# 在Excel中修改切片器 C# 删除Excel中的切片器 切片器(Slicer)是Excel中的一个强大工具,它提供了直观且交互式的方式来过滤数据。通过切片器,…

【Python修仙编程】(二) Python3灵源初探(7)

字典的修炼——修仙者的法宝库 师傅玄天真人在他面前摊开一本泛黄的法典,上面写着:“字典是修仙者存储法宝的仓库,能让你快速找到需要的宝贝。” “师傅,字典是啥玩意儿?”林羽挠挠头,一脸懵逼。 “字典…

SyntaxError: Illegal return statement

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249, webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间,下面介绍下如何修改配置这个区间。 从页面上修改这个区间,端口区间尽量设置大…

饮食 “巧调理”,缓解手抖有妙方

手抖,这一常见症状背后可能潜藏多种原因,无论是生理性紧张所致,还是病理性疾病引发,合理饮食都对缓解症状有积极意义。健康饮食能够为身体提供必要营养,助力神经系统稳定,从而在一定程度上改善手抖状况。 在…

利用 requestrepo 工具验证 XML外部实体注入漏洞

1. 前言 在数字化浪潮席卷的当下,网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时,也可能暗藏安全风险。XXE(XML外部实体)漏洞作为其中的典型代表,攻击者一旦利用它,便能窃取敏感信息、掌控服务…

考前冲刺,消防设施操作员考试最后一击

考前冲刺,消防设施操作员考试最后一击 考前冲刺阶段至关重要。首先要回归教材,快速浏览重点知识点,强化记忆。同时,对之前做过的错题进行集中复习,分析错误原因,避免在考试中再次犯错。进行全真模拟考试&a…

【javaEE】多线程(基础)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

【江科大STM32】TIM输入捕获模式PWMI模式测频率

一、输入捕获测频率 接线图: 测信号的输入引脚为PA6,信号从PA6进来,待测的PWM信号也是STM32自己生成的,输出引脚是PA0,所以接线这里直接用一根线将PA0引到PA6就可以了。 如果有信号发生器的话,也可以设置成…

第10章 metasploit(网络安全防御实战--蓝军武器库)

网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第10章开始学习利用metasploit渗透测试工具去打metasploit2虚拟机,本文我演示了metasploit端口扫描和…

AI绘画软件Stable Diffusion详解教程(8):图生图进阶篇(手绘修正)

本篇介绍一下图生图的涂鸦绘制模式。 效果和上一篇改变风格雷同,但是可以通过涂鸦的方式,在重绘时对涂鸦的部分进行替换,替换部分的图像参照正向提示词来生成。 一、进入图生图标签页 按箭头指示处,打开涂鸦绘制工作区。 二、涂…

mapbox高阶,结合threejs(threebox)添加三维球体

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox Sphere静态对象二、🍀使用t…

从零开始用HTML、CSS和JavaScript制作贪吃蛇网页小游戏

〇、前言 贪吃蛇是一款经典的休闲游戏,在诺基亚手机时代风靡全球。 作为编程入门者,实现一个贪吃蛇游戏是学习Web前端技术的绝佳练习。 名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN…

计算机网络-服务器模型

一.服务器模型 1.支持多客户端访问 //单循环服务器 socket bind listen while(1) { accept while(1) { recv/send } } close 注:该模式remvform为阻塞态,服务器将等待接收数据 2..支持多客户端同时访问 (并发能力) socket…

aardio - 虚表 —— 两个虚表之间互相拖动交换数据

插入到虚表末尾的方法: import win.ui; import godking.vlistEx; /*DSG{{*/ mainForm win.form(text"vlistEx - table adapter";right849;bottom578;border"thin") mainForm.add( radiobutton{cls"radiobutton";text"移动&qu…

正十七边形尺规作图证明——从高斯的发现到几何实现

正十七边形尺规作图证明——从高斯的发现到几何实现 1. 引言:一个历史性的数学突破 在欧几里得几何中,尺规作图(仅使用直尺和圆规)是最为基础的几何构造方法。古希腊数学家已知如何构造正三角形、正方形和正五边形,但…

Facebook 的历史与发展:从校园网站到全球社交平台

引言 Facebook,这个全球最大的社交网络平台之一,其发展历程充满了创新和变革。从最初的校园网站到如今的全球社交平台,Facebook 不仅改变了人们的沟通方式,也重塑了信息传播和社交互动的模式。 起源:校园内的点子 Fa…

windows无界面后台定时任务 (重启自启动,ODBS为例)

一、前言 mdb(Microsoft Database)是Microsoft Access中使用的一种数据存储格式,可以通过ODBC驱动程序进行访问和操作,在Python中也可以安装相应模块打开。 这是我在项目中更新bs数据的一个实践记录,结合windows定时一起记录一下,方便以后照搬~ 二、安装 Python安装库…

Android Studio 配置国内镜像源

Android Studio版本号:2022.1.1 Patch 2 1、配置gradle国内镜像,用腾讯云 镜像源地址:https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址:Index of /AndroidSDK/