1、描述
2、关键字
合并、有序、两个
合并多个有序
3、思路
两个指针,开始遍历
4、notes
搞一个dum前置节点做标记,
5、复杂度
时间:O(n+m)
空间:O(1)不算结果占用的空间,节点引用 dumdum , curcur 使用常数大小的额外空间
6、code
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
auto h1 = l1;
auto h2 = l2;
ListNode * dummpy_head = new ListNode(0); // 构造前一个节点
auto head = dummpy_head; // 暂存起来
while(h1 && h2){ // 比较原始的两个链表,只要有一个遍历完 就跳出来
if(h1->val < h2->val){
//dummpy_head->val = h1->val; // 这写的啥玩意!!
dummpy_head->next = h1;
h1 = h1->next;
}
else{
dummpy_head->next = h2;
h2 = h2->next;
}
dummpy_head = dummpy_head->next;
}
// 如果剩下的是h1
while(h1){
dummpy_head->next = h1;
h1 = h1->next;
dummpy_head = dummpy_head->next;
}
// 如果剩下的是h2
while(h2){
dummpy_head->next = h2;
h2 = h2->next;
dummpy_head = dummpy_head->next;
}
return head->next;
}
};