合并两个有序链表
Q7nl1s admin

题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

merge_ex1

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1l2 均按 非递减顺序 排列

我的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
// 让 headNode 的下一个元素指向nil,将list1和list2一次接上
var headNode ListNode = ListNode{Next:nil}
var p *ListNode = &headNode
for list1 != nil && list2 != nil{
if list1.Val < list2.Val{
p.Next = list1
list1 = list1.Next
p = p.Next
}else{
p.Next = list2
list2 = list2.Next
p = p.Next
}
}
if list1 == nil{
p.Next = list2
}else{
p.Next = list1
}

return headNode.Next
}

很普通的一道数据结构链表题,几分钟就能写完。

解题思路

把两个排序好的链合并,要求合并后依然是排序好的。结题步骤如下:

  1. 先处理其中一条链为nil的情况,直接返回另一条链,这样可以简化后面的判断条件。
  2. 设置好链接头head和用于移动节点指针node
  3. 利用for循环反复比较,每次选取较小的节点,放在node.Next
  4. 处理l1或l2中剩余的节点

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
// 有一条链为nil,直接返回另一条链
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}

// 此时,两条链都不为nil,可以直接使用l.Val,而不用担心panic
// 在l1和l2之间,选择较小的节点作为head,并设置好node
var head, node *ListNode
if l1.Val < l2.Val {
head = l1
node = l1
l1 = l1.Next
} else {
head = l2
node = l2
l2 = l2.Next
}

// 循环比较l1和l2的值,始终选择较小的值连上node
for l1 != nil && l2 != nil {
if l1.Val < l2.Val {
node.Next = l1
l1 = l1.Next
} else {
node.Next = l2
l2 = l2.Next
}

// 有了这一步,head才是一个完整的链
node = node.Next
}

if l1 != nil {
// 连上l1剩余的链
node.Next = l1
}

if l2 != nil {
// 连上l2剩余的链
node.Next = l2
}

return head
}

总结

  • 迭代
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View