题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
每个链表从左端开始遍历,一边遍历一边创建新链表即可。
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode *t = NULL;
ListNode*r = NULL;
ListNode*p = pHead1, *q = pHead2;
while(p && q)
{
if(p->val <= q->val)
{
if(t == NULL)
{
t = new ListNode(p->val);
r = t;
}
else
{
r->next = new ListNode(p->val);
r = r->next;
}
p = p->next;
}else
{
if(t == NULL)
{
t = new ListNode(q->val);
r = t;
}
else
{
r->next = new ListNode(q->val);
r = r->next;
}
q = q->next;
}
}
while(p)
{
if(t == NULL)
{
t = new ListNode(p->val);
r = t;
}
else
{
r->next = new ListNode(p->val);
r = r->next;
}
p = p->next;
}
while(q)
{
if(t == NULL)
{
t = new ListNode(q->val);
r = t;
}
else
{
r->next = new ListNode(q->val);
r = r->next;
}
q = q->next;
}
return t;
}
void print(ListNode*p){
while(p)
{
printf("%d ", p->val);
p = p->next;
}
putchar(10);
}
int main(void){
ListNode*a = new ListNode(1);
ListNode*p = a;
p->next = new ListNode(3);
p = p->next;
p->next = new ListNode(5);
p = p->next;
p->next = NULL;
ListNode*b = new ListNode(2);
p = b;
p->next = new ListNode(4);
p = p->next;
p->next = new ListNode(6);
p= p->next;
p->next = NULL;
print(a);
print(b);
print(Merge(a, b));
return 0;
}