本文主要讲解了常见的单链表处理方法
定义单链表数据结构
1 | |
合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回
1 | |
复杂度分析
- 时间复杂度:O(n+m),其中 n和 m分别为两个链表的长度。
- 空间复杂度:O(1)。
代码中⽤到⼀个链表的算法题中是很常⻅的「虚拟头结点」技巧,也就是 dummy 节点。有了 dummy 节点这个占位符,可以避免处理空指针的情况,降低代码的复杂性。
合并K个升序链表
给你一个链表数组,每个链表都已经按升序排列。
请将所有链表合并到一个升序链表中,返回合并后的链表。
1 | |
- 时间复杂度:O( n log k),其中 k 是链表的条数,n是这些链表的节点总数。
返回单链表的倒数第 k 个节点
1 | |
- 时间复杂度:O( n )。
删除链表的倒数第k个结点
给一个链表,删除链表的倒数第 k个结点,并且返回链表的头结点。
1 | |
- 时间复杂度:O( n )。
链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
1 | |
判断链表是否包含环
1 | |
返回链表中环的入口结点,如果无环则返回NULL。
1 | |
两个链表是否相交
思路:让 p1 遍历完链表 A 之后开始遍历链表 B,让 p2 遍历完链表 B 之后开始遍历链表 A,这样相
当于「逻辑上」两条链表接在了⼀起,p1和p2就能达到相交结点。
1 | |
83.删除排序链表中的重复元素 I
1 | |
1 | |
82.删除排序链表中的重复元素 II
1 | |
反转单链表
1 | |
反转链表前N个节点
1 | |
反转链表的一部分
1 | |
k个一组反转链表
1 | |
143.重排链表
1 | |
148.排序链表
1 | |
234.回文链表
1 | |
61. 旋转链表
1 | |