2つのソートされたリンクリストをマージする
2つのリンクリストを昇順で入力し、2つのリンクリストをマージして、新しいリンクリストのノードを昇順のままにします。
例1:
入力:1-> 2-> 4、1-> 3-> 4
出力:1-> 1-> 2-> 3-> 4-> 4
制限:
0 <=リンクリストの長さ<= 1000
解決
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
// 考虑代码的鲁棒性
if(!l1 && !l2)
return NULL;
if(!l1)
return l2;
if(!l2)
return l1;
// 新链表指向最小值的头节点
struct ListNode *new_l = l1->val > l2->val ? l2 : l1;
struct ListNode *p = new_l;
// 移动
if(l1->val <= l2->val){
l1 = l1->next;
}else{
l2 = l2->next;
}
while(l1 && l2){
// 当l1和l2都不为空时,进行比较
if(l1->val <= l2->val){
p->next = l1;
p = p->next;
l1 = l1->next;
}else{
p->next = l2;
p = p->next;
l2 = l2->next;
}
}
// 如果l1空了
if(!l1)
p->next = l2;
if(!l2)
p->next = l1;
return new_l;
}