-
题目描述
-
解题思路心得
天呐我最开始是写的什么丑代码?大概就是a一个指针,b一个指针循环比较谁小就加入c然后++
-
代码
#include <iostream>
using namespace std;
struct LNode
{
int data;
LNode *next;
};
void createlist(LNode *&L, int length)
{
LNode *p = L;
for (int i = 0; i < length; i++)
{
LNode *tmp = new LNode;
cin >> tmp->data;
tmp->next = NULL;
p->next = tmp;
p = p->next;
}
}
void Printlist(LNode *L)
{
LNode *p = L->next;
while (p)
{
cout << p->data;
if (p->next != NULL)
{
cout << " ";
}
p = p->next;
}
cout << endl;
}
LNode* sortlist(LNode *&LA, LNode *&LB)
{
LNode *pa = LA->next;
LNode *pb = LB->next;
LNode *c = new LNode;
c->next = NULL;
LNode *pc = c;
while (pa!=NULL||pb!=NULL)
{
// a没了加上b
if (pa == NULL)
{
pc->next =pb;
break;
}
// b没了加上a
if (pb == NULL)
{
pc->next =pa;
break;
}
// a小要a
if (pa->data < pb->data)
{
pc->next=pa;
pa = pa->next;
pc =pc->next;
pc->next=NULL;
}
// b小要b
else if(pa->data > pb->data)
{
pc->next=pb;
pb = pb->next;
pc =pc->next;
pc->next=NULL;
}
// 一样要一个
else{
pc->next=pa;
pa = pa->next;
pb = pb->next;
pc =pc->next;
pc->next=NULL;
}
}
return c;
}
int main()
{
int anum = 0, bnum = 0;
while (1)
{
LNode *a = new LNode;
LNode *b = new LNode;
a->next = NULL;
b->next = NULL;
cin >> anum >> bnum;
if (anum == 0 || bnum == 0)
{
break;
}
createlist(a, anum);
createlist(b, bnum);
Printlist(sortlist(a, b));
}
return 0;
}