思路1:使用数组 然后进行排序
将两个节点都放入数组中,数组sort一下,然后再接上
时间复杂度(nlogn) 比较简单就不写了
思路2:函数名字中有merge 就该想到归并排序的合并部分,同时利用链表有序的特点
用一个新链表, 判断两条链表当前note的大小,如果小就挂到新链表上。最后返回新链表头即可
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* ret = new ListNode(0);
ListNode* pre = ret;
//判断l1跟l2是否为空 如果为空返回另外一个
if(!l1)
return l2;
if(!l2)
return l1;
//l1跟l2都不为空,因为有可能一条链表比较少,已经添加完了 不能再访问了
while(l1 && l2){
//判断大小,如果小于就挂到pre的next,同时移动到下一节点
if(l1->val < l2->val){
pre->next = l1;
l1 = l1->next;
}else{
pre->next = l2;
l2 = l2->next;
}
pre = pre->next;
}
//有可能一条为空,一条还有值,需要进行判断
//因为是有序的 所以直接挂到最后面即可
if(l1){
pre->next = l1;
}
if(l2){
pre->next = l2;
}
return ret->next;
}
};