前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >链表第一课

链表第一课

作者头像
mwangblog
发布于 2018-08-14 10:11:05
发布于 2018-08-14 10:11:05
32700
代码可运行
举报
文章被收录于专栏:mwangblogmwangblog
运行总次数:0
代码可运行

链表是一种基础的数据结构,它表示一列元素。

链表由节点(Node)组成,一个节点包含两个变量,一个变量存储我们需要保存的数据,另一个变量指向下一个节点,如下图所示:

在程序中表示如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private class Node{
    Item item;    // 保存数据
    Node next;   // 指向下一个节点}

若干个这样的节点就可以组成一个链表。此外,我们还需要两个变量,分别指向链表的头节点和尾节点:本文使用first变量指向头节点,last变量指向尾节点。

下面介绍四个链表的操作:

  • 创建第一个节点。
  • 在表头添加节点。
  • 在表尾添加节点。
  • 在表头删除节点。

创建第一个节点

创建第一个节点非常容易,只需要新建一个节点,并将变量first和last都指向这个节点即可:

这个节点的next变量为null(空),意味着它不指向其他节点,也就是说它是最后一个节点。它还是第一个节点,所以last和first变量都指向它。

这个节点的item变量被赋值为boy,这是我们希望存储的数据。

在表头添加节点

在表头添加节点需要使用一个临时变量,这里把这个临时变量叫做oldfirst,它指向添加新节点之前的头节点。

在表头添加节点的过程如下:

  • 将oldfirst变量指向头节点;
  • 新建一个节点并将first变量指向它;
  • 将新节点的next变量指向oldfirst变量所指的节点。

这样,新建的节点成了整个链表的头节点,而原先的头节点成了链表的第二个节点。如下图:

至此,我们得到了一条拥有两个节点的链表:

在表尾添加节点

在表尾添加节点和在表头添加节点非常相似,过程如下:

  • 将oldlast变量指向尾节点;
  • 新建一个节点并将last变量指向他;
  • 将oldlast变量所指节点的next变量指向新节点。

这样,新添加的节点变成了尾节点,原先的尾节点变成了倒数第二个节点。

至此,我们拥有了一条由三个节点构成的链表:

在表头删除节点

在表头删除节点很简单,只需要将first变量指向第二个节点(头节点next变量所指的节点),然后让原先的头节点随风而去即可:

链表一个典型的应用是在栈(LIFO)和队列(FIFO)中,栈使用后进先出的策略,在表头添加节点,在表头删除节点;队列使用先进先出的策略,在表头添加节点,在表尾删除节点。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构和算法-单向链表
链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内的存储位置不必须相邻,那么,怎么表示逻辑上的相邻关系呢?可以给每个元素附加一个指针域,指向下一个元素的存储位置。 如图:
joshua317
2021/09/08
3640
Data Structures (二) - 链表LinkedList实现(Part B)
单向链表的缺点是只能单向查询节点,即只能从头节点不断的调用next来获取洗一个节点,如果链表中节点元素非常多,会导致查询效率低下
RiemannHypothesis
2022/08/19
2050
Data Structures (二) - 链表LinkedList实现(Part B)
删除链表的倒数第N个节点,并返回链表的头节点
1、先循环一遍链表,求出链表的长度L,倒数第N个节点就是从开头数第(L-N+1)个节点,将此节点的next指向下下节点就可以了。
BUG弄潮儿
2021/02/03
5110
删除链表的倒数第N个节点,并返回链表的头节点
Java之手写LinkedList(中)
由于今天要写add(int index,T t)方法,索引会把内部类中的递归的get(int index)改造成获取节点,不直接获取元素,外部类的get方法也会稍加改动。
用户5224393
2019/08/20
4260
从源码角度看LinkedList一些基本操作(jdk1.7)
LinkedList是一个双向链表,就像下图展示那样,每个节点有个指向上个元素和一个指向下个元素的指针。
云枭
2019/02/25
4150
链表看这一篇真的就够了!
有的小伙伴说没有学过数据结构,对链表不是特别了解,所以今天我们就来对链表进行一个系统的总结,另外大家如果想提高算法思想的话,我建议还是要系统的学一下数据结构的。
公众号袁厨的算法小屋
2020/11/25
7600
链表看这一篇真的就够了!
LinkedList源码解析
LinkedList 集合底层是一个双向链表结构,具有增删快,查询慢的忒点,内部包含大量操作首尾元素的方法。适用于集合元素先入先出和先入后出的场景,在队列源码中被频繁使用。
用户7353950
2022/06/23
3370
LinkedList源码解析
【数据结构与算法】深入理解 单链表
数据域用于存储实际的数据(可以是任意类型的数据),而指针域则存储指向下一个节点的地址。
倔强的石头
2024/12/06
2220
【数据结构与算法】深入理解 单链表
浅谈链表--数据结构的重要根基
链表、列表,说起来有点相似,作用也有点类似,但可别傻傻分不清楚。我们一般说的列表,是一个连续的序列,用来存储一组数据。而链表,虽然也是有序的存储结构,但它不限定要“连续”的。
Crossin先生
2019/11/13
8970
数据结构之链表解析
  我们知道,数组作为数据存储结构有一定的缺陷。在无序数组中,搜索时低效的;而在有序数组中,插入效率又很低;不管在哪一种数组中删除效率都很低。况且一个数组创建后,它的大小是无法改变的。而链表可能是继数组之后第二种使用得最广泛的通用数据结构了。这里主要来讨论并写一个单链表和双向链表。
Kevin_Zhang
2019/03/14
4220
结构与算法(03):单向链表和双向链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点组成,节点可以在运行时动态生成,节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
知了一笑
2020/09/21
3930
结构与算法(03):单向链表和双向链表
【愚公系列】2023年11月 数据结构(二)-链表
数据结构是计算机科学中的一个重要概念,它描述了数据之间的组织方式和关系,以及对这些数据的访问和操作。常见的数据结构有:数组、链表、栈、队列、哈希表、树、堆和图。
愚公搬代码
2023/11/01
3430
JDK1.8源码(六)——java.util.LinkedList 类
  上一篇博客我们介绍了List集合的一种典型实现 ArrayList,我们知道 ArrayList 是由数组构成的,本篇博客我们介绍 List 集合的另一种典型实现 LinkedList,这是一个由链表构成的数组,关于链表的介绍,在这篇博客中 我们也详细介绍过,本篇博客我们将介绍 LinkedList 是如何实现的。 1、LinkedList 定义 LinkedList 是一个用链表实现的集合,元素有序且可以重复。 1 public class LinkedList<E> 2 extends A
IT可乐
2018/04/17
1.2K0
JDK1.8源码(六)——java.util.LinkedList 类
Java之手写LinkedList改造
改造Iterator /** * 返回在此列表中的元素上进行迭代的迭代器(按适当顺序)。 * 此实现仅返回列表的一个列表迭代器。 * @return */ public Iterator<T> iterator() { /** * 这里我们回顾一下匿名内部类 */ return new Iterator<T>() { /** * 第一次记录first节点 */ private
用户5224393
2019/08/20
3960
前端学数据结构与算法(三):链表为什么能和数组相提并论?用链表实现数组bettle下
说到线性的数据结构,那就不得不提链表,这一章我们从底层实现一个链表,并用它'高仿'一个数组,实现数组一系列的API,最后在性能上bettle下,从而更加深入理解这种数据结构的特性,也搞清楚为什么要理解这种数据结构。也许有一天实际的开发中,遇到某些场景,在我们习惯性的使用数组时,可以停下来思考几秒,也许这个场景用链表更合适(然后还是用数组)。
飞跃疯人院
2020/10/07
4570
快慢指针巧解链表题目(一)
要删除链表中的某个节点,需要知道其前一个节点。对于头节点来说,其没有前一个节点,因此,需定义虚拟头节点,如下图:
五分钟学算法
2021/03/10
3160
入门单链表
链表(linked list)作为一种常见的数据结构,通常由数据和指针组合而成。在一些没有指针结构的程序语言中,如 python、java等,指针被引用所代替。链表中的每个节点通过指针或引用相连接,你可以通过指针或者引用来遍历节点。
用户2870857
2019/12/20
6490
数据结构Stack
​ 在很多应用中,我们需要维护多个对象的集合,这种操作非常简单。我们可能想要向集合中 加入某个元素,去掉某个元素,以及遍历 集合中的元素并对他们执行某种操作,当然还有 检查集合是否为空。对于大多数操作来说,目的都很明确 关键是当需要去掉一个元素时,去掉哪一个元素呢?处理这类问题 有两个经典基础数据结构,栈和队列。 ​ 它们的区别就在于 去除元素的选择方式。在栈中,我们取出 最近加入的元素。插入元素对应的术语是入栈(push) 去掉最近加入的元素叫做出栈(pop)。这也叫做后进先出原则 ( LIF
lwen
2018/04/17
6910
Java之手写LinkedList(下)
返回节点对象element在链表中首次出现的位置,如果链表中无此节点的对象则返回-1
用户5224393
2019/08/20
7820
C语言实例_双向链表增删改查
双向链表(Doubly Linked List)是一种常见的数据结构,在单链表的基础上增加了向前遍历的功能。与单向链表不同,双向链表的每个节点除了包含指向下一个节点的指针外,还包含指向前一个节点的指针。
DS小龙哥
2023/08/26
1930
C语言实例_双向链表增删改查
推荐阅读
相关推荐
数据结构和算法-单向链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验