您的位置:首页 > 其它

21. Merge Two Sorted Lists leetcode(lists)

2016-11-29 22:22 281 查看
Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

方法一、多开辟了一个链表

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(NULL == l1 || NULL == l2)
{
return (NULL==l1)?l2:l1;
}

ListNode l3(0); //必须使用这种定义,如果写成ListNode* l3会超时,必须带头节点
ListNode* p1;
ListNode* p2;
ListNode* p3;

p1 = l1;
p2 = l2;
p3 = &l3;

while(p1 && p2)
{
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
if(p1->val <= p2->val)
{
cout<<"1p1 "<<p1->val<<endl;
tmp->val = p1->val;
tmp->next = NULL;
p1 = p1->next;
}
else
{
cout<<"1p2 "<<p2->val<<endl;
tmp->val = p2->val;
tmp->next = NULL;
p2 = p2->next;
}

p3->next = tmp;
p3 = tmp;
}

while(p1)
{
cout<<"2p1"<<p1->val<<endl;
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
tmp->val = p1->val;
tmp->next = NULL;
p3->next = tmp;
p3 = tmp;
p1 = p1->next;
}

while(p2)
{
cout<<"2p2"<<p2->val<<endl;
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
tmp->val = p2->val;
tmp->next = NULL;
p3->next = tmp;
p3 = tmp;
p2 = p2->next;
}

return l3.next; //因为带头节点所以必须返回l3.next
}


方法二、直接在第一个链表上进行修改,最终返回第一个链表

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(NULL == l1 || NULL == l2)
{
return (NULL==l1)?l2:l1;
}

ListNode* p1= l1;
ListNode* pre = p1;
ListNode* p2 = l2;
while(p1 && p2)
{
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
if(p1->val <= p2->val)
{
pre = p1;
p1 = p1->next;
}
else
{
if(pre == p1) //注意当pre==p1时表示要将p2的节点插入p1的头节点
{
tmp->val = p2->val;
tmp->next = pre;
pre = tmp;
l1 = pre;
p2 = p2->next;
}
else
{
tmp->val = p2->val;
pre->next = tmp;
tmp->next = p1;
p2 = p2->next;
pre = tmp;

}
}
}

while(p2)
{
ListNode* tmp = (ListNode*)malloc(sizeof(ListNode));
tmp->val = p2->val;
tmp->next = NULL;
pre->next = tmp;
pre = tmp;
p2 = p2->next;
}

return l1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: