前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >数据结构-链表

数据结构-链表

作者头像
宅蓝三木
发布于 2024-10-09 13:19:40
发布于 2024-10-09 13:19:40
11400
代码可运行
举报
文章被收录于专栏:三木的博客三木的博客
运行总次数:0
代码可运行

链表(Linked List)的基本概念

链表是一种常见的数据结构,它由一系列节点(Node)组成。每个节点包含两部分:数据部分和指向下一个节点的指针(Pointer)。链表通过这些指针将节点按顺序连接在一起。

链表的类型

  • 单链表(Singly Linked List):每个节点只有一个指针,指向下一个节点。
  • 双链表(Doubly Linked List):每个节点有两个指针,一个指向前一个节点,一个指向下一个节点。
  • 循环链表(Circular Linked List):单链表或双链表的最后一个节点的指针又指向了链表的头节点,形成一个环形结构。

链表的基本操作

  • 创建链表:首先创建头节点(Head Node),然后逐个添加后续节点。
  • 插入节点
    • 在头部插入:创建新节点,将新节点的指针指向原头节点,然后更新头节点为新节点。
    • 在中间插入:找到要插入位置的前一个节点,创建新节点,将新节点的指针指向插入位置的节点,然后将前一个节点的指针指向新节点。
    • 在尾部插入:找到链表的尾节点,创建新节点,将尾节点的指针指向新节点,并将新节点的指针设为 None。
  • 删除节点
    • 删除头节点:将头节点指向下一个节点,然后释放原头节点的内存。
    • 删除中间节点:找到要删除节点的前一个节点,将其指针绕过要删除的节点,直接指向该节点的下一个节点,然后释放要删除节点的内存。
    • 删除尾节点:找到尾节点的前一个节点,将其指针设为 None,然后释放尾节点的内存。
  • 遍历链表:从链表的头节点开始,通过节点的指针依次访问每个节点,直到到达链表的尾部(指针为 None)。

链表的应用场景

  • 动态数据存储:链表在需要频繁进行插入和删除操作的场景中非常有用,例如在实现一个动态大小的集合或者队列时。
  • 内存管理:操作系统在管理内存分配时会使用链表来记录空闲内存块的信息。
  • 多项式表示:在数学计算中,可以用链表来表示多项式,每个节点存储多项式中的一项的系数和指数。

链表的操作技巧

  • 哨兵节点:可以创建一个新的节点,让其next指向头节点,从而可以简化边界的判断
  • 双指针:前后双指针和快慢双指针

删除倒数第k个节点:https://leetcode.cn/problems/SLwz0R/description/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummy = ListNode(0)
        dummy.next = head
        p1 = dummy
        p2 = head
        for _ in range(n):
            p2 = p2.next
        while p2 is not None:
            p1 = p1.next
            p2 = p2.next
        p1.next = p1.next.next
        return dummy.next
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
leetcode-19. 删除链表的倒数第 N 个结点
这道题首先考虑用快慢双指针。先定义一个哑结点值为 0 并指向 head 节点,定义 first 节点并赋值为 head 节点,定义 second 节点并赋值为 dummy 节点,先让 first 节点比 second 节点先走 n 步,first 节点与 second 节点一起走,直到 first 节点为空,此时 second 所在位置为要删除节点的前一个节点,因此让其指向下下个节点即可完成删除倒数第 n 个节点的操作。dummy.next 指向的是删除后的链表,并把最终结果赋值给 ans 链表并返回。
灰太狼学Java
2022/06/17
1610
leetcode-19. 删除链表的倒数第 N 个结点
【算法/学习】:搞懂链表题型,这一篇就够了
链表(Linked List) 是一种线性数据结构,由一系列节点组成。每个节点包含两个部分:
IsLand1314
2025/02/25
1050
【算法/学习】:搞懂链表题型,这一篇就够了
leetcode 234. 回文链表 js 实现
给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。
蓓蕾心晴
2022/10/30
4320
leetcode 234. 回文链表 js 实现
数据结构之双向链表(赋源码)
本篇所述:带头双向循环链表,简称双链表,双链表和单链表(不带头单向不循环链表)是八种链表中常用的两个链表,
技匠晓晨
2024/11/26
780
数据结构之双向链表(赋源码)
经典算法之链表篇(二)
ma布
2024/10/21
700
经典算法之链表篇(二)
【数据结构与算法】链表
在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续
程序员波特
2024/09/24
1290
【数据结构与算法】链表
【数据结构】链表的原理及java实现
链表是一种数据结构,和数组同级。比如,Java中我们使用的ArrayList,其实现原理是数组。而LinkedList的实现原理就是链表了。链表在进行循环遍历时效率不高,但是插入和删除时优势明显。下面对单向链表做一个介绍。
全栈程序员站长
2022/06/27
2380
【数据结构】链表的原理及java实现
【JavaScript 算法】链表操作:从基础到进阶
链表是一种灵活的线性数据结构,适用于需要频繁插入和删除操作的场景。通过理解链表的基本操作和进阶操作,我们可以更好地应用链表来解决实际问题。在本文中,我们介绍了单向链表和双向链表的基本操作,以及链表的进阶操作,如反转链表和合并有序链表。希望通过本文的介绍,大家能够更好地理解和应用链表。
空白诗
2024/07/20
2060
【JavaScript 算法】链表操作:从基础到进阶
【数据结构】10道经典面试题目带你玩转链表
https://leetcode.cn/problems/remove-linked-list-elements/
修修修也
2024/04/01
1040
【数据结构】10道经典面试题目带你玩转链表
面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!
链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。
圆号本昊
2021/09/24
2600
面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!
[Leetcode][python]Remove Nth Node From End of List
加一个虚假头结点dummy,并使用双指针p1和p2。p1先向前移动n个节点(从dummy节点开始移动,所以移动了n其实是移动到了前一位),然后p1和p2同时移动,当p1.next==None时,此时p2.next指的就是需要删除的节点前面一个节点,将其指向.next.next即可。
蛮三刀酱
2019/03/26
3680
前端学数据结构与算法(三):链表为什么能和数组相提并论?用链表实现数组bettle下
说到线性的数据结构,那就不得不提链表,这一章我们从底层实现一个链表,并用它'高仿'一个数组,实现数组一系列的API,最后在性能上bettle下,从而更加深入理解这种数据结构的特性,也搞清楚为什么要理解这种数据结构。也许有一天实际的开发中,遇到某些场景,在我们习惯性的使用数组时,可以停下来思考几秒,也许这个场景用链表更合适(然后还是用数组)。
飞跃疯人院
2020/10/07
4550
LeetCode通关:听说链表是门槛,这就抬脚跨门而入
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的引用。也可以称之为数据域和指针域。
三分恶
2021/07/27
4410
代码随想录day02--链表
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
ma布
2024/12/25
620
代码随想录day02--链表
[算法总结] 一文搞懂面试链表题
链表是面试过程中经常被问到的,这里把剑指offer 和 LeetCode 中的相关题目做一个汇总,方便复习。
尾尾部落
2018/09/04
7730
leetcode 160. 相交链表 js 实现
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
蓓蕾心晴
2022/11/14
5090
leetcode 160. 相交链表 js 实现
数据结构与算法 | 链表(Linked List)
链表(Linked List)是一种线性数据结构,它由一系列节点(Node)组成,每个节点包含两部分:数据和指向下(上)一个节点的引用(或指针)。链表中的节点按照线性顺序连接在一起(相邻节点不需要存储在连续内存位置),不像数组一样存储在连续的内存位置。链表通常由头节点(Head)来表示整个链表,而尾节点的下一个节点指向null,表示链表的结束。
Java研究者
2023/10/19
1.3K1
数据结构与算法 | 链表(Linked List)
删除链表的倒数第n个节点
由于这是一个链表,所以我们一般只能获取到一个头结点,然而其他信息我们不确定。所以可以采用双指针的方法。
忧愁的chafry
2022/10/30
4380
删除链表的倒数第n个节点
数据结构--双链表
双链表是一种在节点之间通过两个指针进行连接的数据结构,每个节点都有两个指针:一个指向前一个节点,另一个指向下一个节点。带头节点的双链表在实际应用中非常常见,本文将详细介绍其实现方法,并提供完整的 C 语言代码示例。
平凡之路.
2024/10/09
820
数据结构--双链表
算法:双指针
双指针是一种思想或一种技巧并不是特别具体的算法。具体就是用两个变量动态存储两个结点,来方便我们进行一些操作。通常用在线性的数据结构中。
用户3578099
2022/04/18
3660
算法:双指针
推荐阅读
相关推荐
leetcode-19. 删除链表的倒数第 N 个结点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验