Merge Two Sorted Lists
# 题目
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4
Output: 1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 解答思路
遍历即可,注意参数校验。
# 代码
//Definition for singly-linked list.
type ListNode struct {
Val int
Next *ListNode
}
// 循环遍历合并即可
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
// 参数健壮性编写
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}
var mergeList *ListNode
var currentNode *ListNode
// 选取头结点 复用 l1 l2 地址
if l1.Val < l2.Val {
mergeList = l1
l1 = l1.Next
} else {
mergeList = l2
l2 = l2.Next
}
currentNode = mergeList
for {
// 退出循环条件
if l1 == nil {
currentNode.Next = l2
break
}
if l2 == nil {
currentNode.Next = l1
break
}
// 比较大小
if l1.Val < l2.Val {
currentNode.Next = l1
l1 = l1.Next
currentNode = currentNode.Next
continue
}
currentNode.Next = l2
currentNode = currentNode.Next
l2 = l2.Next
}
return mergeList
}
func TestMergeTwoLists(t *testing.T) {
l5 := &ListNode{16, nil}
l4 := &ListNode{8, l5}
l3 := &ListNode{4, l4}
l2 := &ListNode{2, l3}
l1 := &ListNode{1, l2}
ll3 := &ListNode{6, nil}
ll2 := &ListNode{3, ll3}
ll1 := &ListNode{1, ll2}
res := mergeTwoLists(l1, ll1)
for {
if res == nil {
break
}
fmt.Printf("=>%v", res.Val)
res = res.Next
}
}
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
编辑 (opens new window)
上次更新: 2023/02/17, 16:53:03