1. 题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
1 2
| 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
|
示例 2:
1 2
| 输入:l1 = [], l2 = [] 输出:[]
|
示例 3:
1 2
| 输入:l1 = [], l2 = [0] 输出:[0]
|
提示:
- 两个链表的节点数目范围是
[0, 50]
-100 <= Node.val <= 100
l1
和 l2
均按 非递减顺序 排列
2. 思路
- 已知两个链表已经按照非递减顺序进行排序,初始化头指针
result
作为结果集指针变量
- 遍历两个链表,当两个链表均有值时,判断其对应值的大小,并实时迁移节点到
result
结果链表中
- 过程中需要注意的是每次迁移完成后,需要将对应链表的节点移动到下一格
- 当不满足两个链表同时遍历的条件时,挨个将两个链表剩余的节点追加至结果链表中
- 返回
result
头指针的下一个节点作为结果链表返回
3. 代码
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
|
class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { var result = new ListNode();
var node = result; while (list1 != null && list2 != null) { var leftVal = list1.val; var rightVal = list2.val;
if (leftVal > rightVal) { node.next = list2; list2 = list2.next; } else { node.next = list1; list1 = list1.next; }
node = node.next; }
while (list1 != null) { node.next = list1; list1 = list1.next; node = node.next; }
while (list2 != null) { node.next = list2; list2 = list2.next; node = node.next; }
return result.next; } }
|
4. 复杂度
Author:
zchengb
License:
Copyright (c) 2019-2024 zchengb