21. 合并两个有序链表
文章目录
-
- [21. 合并两个有序链表](https://leetcode.cn/problems/merge-two-sorted-lists/)
- ==思路==
- 总结
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
示例 3:
输入:l1 = [], l2 = [0]
输出:[0]
提示:
- 两个链表的节点数目范围是 [0, 50]
- -100 <= Node.val <= 100
- l1 和 l2 均按 非递减顺序 排列
思路
-
起一个头节点,然后双指针分别指向list1和list2依次判断这两个节点的val值,把较小的排到头结点后面
-
时间复杂度为O(n+m),空间复杂度为O(1)
- /**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
//定义头节点
dummy := &ListNode{}
cur := dummy
for {
if list1 == nil || list2 == nil {
break
}if list1.Val <= list2.Val {
//如果list1的val值较小,就把该节点排到cur后面
cur.Next = list1
list1 = list1.Next
} else {
//同理
cur.Next = list2
list2 = list2.Next
}
//移动cur
cur = cur.Next
}
//把没排完的剩下的节点直接排在cur的后面
if list1 == nil {
cur.Next = list2
} else {
cur.Next = list1
}return dummy.Next
}
总结
本文是 《算法题目解析系列》 的第 [18] 篇,本系列将持续更新,每篇都提供清晰的思路与编程语言实现。欢迎关注,第一时间获取更新。如果你有想看的题目,也可以在评论区留言告诉我。


