-
题目描述
-
解题思路心得
是跟227一起写的但是不知道为啥写228算差集时就变聪明了
a一个指针,b一个指针。a与b相等不要。a与b不相等时:若a已经比b小,直接要a(b再向后找更大了);若a比b大,b向后找看看有没有更大的会和a相等。
-
代码
#include <iostream>
using namespace std;
struct LNode
{
int data;
LNode *next;
/* data */
};
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;
/* code */
}
}
int Printlist(LNode *L)
{
LNode *p = L->next;
int count=0;
if (p == NULL)
{
return 0;
}
while (p)
{
cout << p->data;
if (p->next != NULL)
{
cout << " ";
/* code */
}
p = p->next;
count++;
}
cout << endl;
return count;
}
// a-b差集
LNode *diflist(LNode *&LA, LNode *&LB)
{
LNode *pa = LA->next;
LNode *pb = LB->next;
LNode *c = new LNode;
c->next = NULL;
LNode *r=c;
while (pa && pb)
{
if (pa->data < pb->data)
{
r->next = pa;
pa = pa->next;
r = r->next;
r->next = NULL;
}
else if (pa->data > pb->data)
{
pb = pb->next;
}
else
{
pa = pa->next;
pb = pb->next;
}
}
r->next = pa;
return c;
}
int main()
{
int anum = 0, bnum = 0;
while (1)
{
LNode *a = new LNode;
LNode *b = new LNode;
LNode *c;
a->next = NULL;
b->next = NULL;
cin >> anum >> bnum;
if (anum == 0 || bnum == 0)
{
break;
}
createlist(a, anum);
createlist(b, bnum);
cout<<Printlist(diflist(a, b))<<endl;
}
return 0;
}