合并两个有序链表(LeetCode No.21)
一、算法思路
1.1 建模
这题非常简单,作为系列开篇。将两个有序单链表进行合并,本质思路是使用两个逐一偏移指针p1
、p2
对链表l1
、l2
进行元素比对,获取min(p1, p2)
元素拼接到新链表(结果链表)上。抽象来看,像拉拉链一样。l1、l2为拉链的左右链,拉取的过程是融合两者元素,形成拉完后的链条。
核心需要:
- 两个偏移指针,逐一遍历l1、l2
- 对链表结点数据域的比对方法
- 一条新的单链表,用于承载结果
1.2 注意事项
-
新创建的单链表可以使用「虚拟头结点」,也就是 chain 节点。利用虚拟头结点进行占位,可以避免空指针边界异常,降低代码的复杂性。
-
两条待处理的单链表长度是不一定相等的,需要考虑较长链表多出部分的结点处理。
二、核心代码
1 | func mergeTwoLists(l1: SingleLinkList<Int>, l2: SingleLinkList<Int>) -> SingleLinkList<Int> { |
See the complete code for details: https://github.com/Smallfan/SwiftDataStructure
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 程序猿小风扇!