基础算法—链表篇
基础算法—链表篇
链表的基础知识
链表的分类
单链表
代码
1 |
|
双链表
每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。
双链表 既可以向前查询也可以向后查询。
循环链表
顾名思义,就是链表首尾相连。循环链表可以用来解决约瑟夫环问题。
链表的存储方式
数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。
链表是通过指针域的指针链接在内存中各个节点。
所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。
链表的操作
删除节点
添加节点
反转节点
性能分析
虚拟头结点
链表的一大问题就是操作当前节点必须要找前一个节点才能操作。这就造成了,头结点的尴尬,因为头结点没有前一个节点了。
每次对应头结点的情况都要单独处理,所以使用虚拟头结点的技巧,就可以解决这个问题。
反转链表
相关题目
增删改查
203. 移除链表元素
707. 设计链表
19. 删除链表的倒数第 N 个结点
思路
160. 相交链表
思路
双指针
21. 合并两个有序链表
86. 分隔链表
思路
将链表拆成两个,一个链表中的值都小于X,另一个都大于X,然后进行合并。
23. 合并K个升序链表
思路
小根堆
24. 两两交换链表中的节点
思路
快慢指针
876. 链表的中间结点
141. 环形链表
思路
142. 环形链表 II
思路
反转链表(递归)
递归魔法:反转单链表 :: labuladong的算法小抄 (gitee.io)
反转整个链表
1 |
|
反转前 N 个节点
1 |
|
反转链表的一部分
1 |
|
反转链表(迭代)
反转整个链表
1 |
|
反转区间 [a, b) 的元素,注意是左闭右开
1 |
|
206. 反转链表
思路
92. 反转链表 II
25. K 个一组翻转链表
234. 回文链表
思路
通过快慢指针找到中点,反转前半部分链表,和后半链表进行匹配
链表构造
143. 重排链表
138. 复制带随机指针的链表
剑指 Offer II 028. 展平多级双向链表
剑指 Offer II 029. 排序的循环链表
思路
基础算法—链表篇
https://yztldxdz.top/2022/11/03/基础算法—链表篇/