【LC】合并两个有序链表
题目描述:
题解一:链接+排序
- 直接拼接两个链表
- 给链表排序
- 输出链表头结点
1 | class Solution { |
题解二:新头结点链接
思路:
- 使用一个新的头结点head
- 循环将两个链表的结点依次比较
- 较小者申请新结点链接到head后
- 循环退出后,链接剩余链表的结点
- 返回head->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
39class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1 == nullptr) return list2;
if(list2 == nullptr) return list1;
ListNode* ptr1 = list1;
ListNode* ptr2 = list2;
//头结点
ListNode* head = new ListNode();
ListNode* p = head;
while(ptr1 != nullptr && ptr2 != nullptr)
{
if(ptr1->val < ptr2->val)
{
p->next = new ListNode(ptr1->val, nullptr);
ptr1 = ptr1->next;
}
else
{
p->next = new ListNode(ptr2->val, nullptr);
ptr2 = ptr2->next;
}
p = p->next;
}
while(ptr1 != nullptr)
{
p->next = new ListNode(ptr1->val, nullptr);
ptr1 = ptr1->next;
p = p->next;
}
while(ptr2 != nullptr)
{
p->next = new ListNode(ptr2->val, nullptr);
ptr2 = ptr2->next;
p = p->next;
}
return head->next;
}
};题解三:递归
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 code-016!