一、可用信息
链表,有序
二、代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode dummy(0);
ListNode* head = &dummy;
if(list1 == nullptr) return list2;
if(list2 == nullptr) return list1;
while(list1 && list2){
if(list1->val > list2->val) swap(list1, list2);
head->next = list1;
list1 = list1->next;
head = head->next;
}
head->next = list1 ? list1 : list2;
return dummy.next;
}
};
1、创建新的有序链表,使用dummy,而不使用ListNode* head = new ListNode的原因是可以省去析构。在栈上创建而不是在堆上创建。
2、swap的难点在于交换的是变量的值还是变量的地址。我认为可以理解为将两个变量的名称互换了,这里的意思是值小的叫list1。
3、最后如果list1先结束就把list2剩余的接上,反之亦然。