《图解数据结构算法》链表总结笔记
总记
链表,一种数据结构,每一个元素都有一个指向下一个元素的指针,通过指针将多个元素链接形成的有序数据结构称为链表。本文通过分析LeetCode平台上《图解数据结构算法》一文中的链表专题来介绍常见的链表解题技巧。
方法总览
辅助栈
常用于链表的反转,栈结构具有先进后出的特点,与遍历链表时的元素访问顺序相反,故可以用栈反转链表。
快慢指针
等距型
因为在链表中的遍历是单向的,所以在未知链表的长度且需要访问链表的倒数第N
个元素时,先让一个指针领先于主指针(N-1)
个元素,这样该指针触底时,另一个指针恰好停在倒数第N
个元素上。
异速型
如果一个链表是带环的,那么令两个指针分别以每次遍历前移1
和2
个元素的速度移动,这样在环形结构上后者一定会追上前者,从而判断出链表带环的情况。
双指针
合并链表
用多个指针分别指向不同的若干个链表,在遍历中就可以合并两个不同的链表
相同路径同步
参见训练计划5,通过设计指针的行动路径,巧妙地使得两指针走过相同的路径时就可以得到问题的解。
拆分与拼接
当链表的节点除了指向下一位的指针还存在其它与别的节点关联的信息,那么可以考虑将链表的每一个节点做一份复制,将原链表各元素拆分,待处理完其他信息后,再进行合并。