题面

合并两个排序链表。

算法

创建结果链表头*res,*p指向头,当两个链表节点都不为空时,比较节点值,值小的挂在p后面,二者(p和小者)顺次后移。知道某条链表空,跳出while循环。接着,直接将不空的链表挂在p后即可。

Note: 注意返回值 res->next;

源码

 1 class Solution {
 2 public:
 3     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
 4         ListNode* res = new ListNode(0);
 5         ListNode* p = res;
 6         //都不为空
 7         while(l1 != nullptr && l2 != nullptr)
 8         {
 9             if(l1->val < l2->val)
10             {
11                 p->next = l1;
12                 p = p->next;
13                 l1 = l1->next;
14             }
15             else
16             {
17                 p->next = l2;
18                 p = p->next;
19                 l2 = l2->next;  
20             }
21         }
22         //至少一条为空
23         if(l1 == nullptr)
24             p->next = l2;
25         else if (l2 == nullptr)
26             p->next = l1;
27         
28         return res->next;
29     }
30 };