题目:
实现一个链表的程序,能够完成两个集合的交
输入:第一行为集合A,第二行为集合B
输出:A交B
#include<iostream>
using namespace std;
typedef int ElemType;
struct Node
{
ElemType data;
Node* next;
};
class LinkList
{
private:
Node* Head;
public:
LinkList()
{
Head = new Node;
Head->next = NULL;
}
~LinkList()
{
Node* q;
Node* p = Head;
while (p)
{
q = p->next;
delete p;
p = q;
}
}
void CreateList1(int n)
{
Node* p, * s;
p = Head;
cout << "Please input " << n << " data:" << endl;
for (int i = 0; i != n; ++i)
{
s = new Node;
cin >> s->data;
s->next = p->next;
p->next = s;
}
}
void CreateList2(int n)
{
Node* p, * s;
p = Head;
cout << "Please input " << n << " data:" << endl;
for (int i = 0; i != n; ++i)
{
s = new Node;
cin >> s->data;
p->next = s;
p = s;
}
p->next = NULL;
}
ElemType GetElem(int i)
{
Node* p = Head->next;
int j = 0;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
{
cout << "location error";
return -1;
}
else
return p->data;
}
int ListLength()
{
if (Head->next = NULL)
return 0;
int i = 0;
Node* p = Head->next;
while (p != NULL)
{
++i;
p = p->next;
}
return i;
}
};
int main()
{
LinkList li, lj, ls;
int n1, n2;
cout << "input number of set_one:";
cin >> n1;
li.CreateList2(n1);
cout << "input number of set_two:";
cin >> n2;
lj.CreateList2(n2);
cout << "The same number:";
for (int i = 0; i != n1; ++i)
{
for (int j = 0; j != n2; ++j)
{
if (li.GetElem(i) == lj.GetElem(j))
cout << li.GetElem(i) << ' ';
}
}
}