标签:
Merge two sorted linked lists and return it as a new list. The new listshould be made by splicing together the nodes of the first two lists.
HideTags
#pragma once
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
//法1:头部添加冗余指针,正常merge
ListNode *mergeTwoLists1(ListNode *l1, ListNode *l2)
{
ListNode* result = new ListNode(-1);//头部附加节点,应返回result->next
ListNode* p = result;
while (l1&&l2)
{
if (l1->val < l2->val)
{
p->next = new ListNode(l1->val);//注意不能写成是p=new。。。。
l1 = l1->next;
}
else
{
p->next = new ListNode(l2->val);
l2 = l2->next;
}
p = p->next;
}
while (l1)
{
p->next= new ListNode(l1->val);
l1 = l1->next;
p = p->next;
}
while (l2)
{
p->next = new ListNode(l2->val);
l2 = l2->next;
p = p->next;
}
return result->next;
}
//法2:二级指针
ListNode *mergeTwoLists2(ListNode *l1, ListNode *l2)
{
ListNode *result;
ListNode **pp = &result;
while (l1&&l2)
{
if (l1->val < l2->val)
{
*pp = new ListNode(l1->val);
l1 = l1->next;
}
else
{
*pp = new ListNode(l2->val);
l2 = l2->next;
}
pp = &(*pp)->next;
}
while (l1)
{
*pp = new ListNode(l1->val);
l1 = l1->next;
pp = &(*pp)->next;
}
while (l2)
{
*pp = new ListNode(l2->val);
l2 = l2->next;
pp = &(*pp)->next;
}
return result;
}
void main()
{
ListNode* l1 = new ListNode(1);
ListNode* l2 = new ListNode(2);
ListNode* l3 = new ListNode(1);
ListNode* l4 = new ListNode(1);
ListNode* result = mergeTwoLists2(l2, l1);
while (result)
{
cout << result->val << ' ';
result = result->next;
}
cout << endl;
system("pause");
}
21.Merge Two Sorted Lists(法1头部附加节点法2二级指针)
标签:
原文地址:http://blog.csdn.net/hgqqtql/article/details/43691695