将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
* 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) {
ListNode *l3, *p, *s ; // p指针指向链表最后一个节点
l3 = new ListNode(0);
p = l3 ;
while(l1 != NULL || l2 != NULL) // 只要l1 l2不全是空链表就一直循环
{
int num1,num2;
bool flag1=false,flag2=false; // 链表到结尾的标志位
if(l1 == NULL)
{
flag1 = true;
}
else
{
num1 = l1->val ;
}
if(l2 == NULL)
{
flag2 = true;
}
else
{
num2 = l2->val ;
}
if(num1<=num2 )
{
if(flag1)
{
s = new ListNode(0);
s->val = num2 ;
s->next = NULL ;
p->next = s;
l2 = l2->next ;
p = p->next ;
}
else
{
s = new ListNode(0);
s->val = num1 ;
s->next = NULL ;
p->next = s;
l1 = l1->next;
p = p->next ;
}
}
else
{
if(flag2)
{
s = new ListNode(0);
s->val = num1 ;
s->next = NULL ;
p->next = s;
l1 = l1->next;
p = p->next ;
}
else
{
s= new ListNode(0);
s->val = num2 ;
s->next = NULL ;
p->next = s;
l2 = l2->next ;
p = p->next ;
}
}
}
return l3->next ;
}
};