【C++OJ_链表】删除重复元素(结构体+链表+类)
题目描述
首先编写链表节点类,随后编写链表类,该类至少包含以下四个函数,分别实现如下功能:
1)链表的尾插法创建(构造函数);
2)删除链表中值重复节点;
3)输出链表。
4)删除链表,释放空间(析构函数)。
主函数创建该类对象,调用上述函数,完成链表的创建及值重复节点的删除,并输出链表。
输入
测试次数t
每组测试数据格式为:n 后跟n个整数
输出
对每组测试数据,输出删除值重复节点的链表。
输入样例
3
10 -10 2 5 32 5 5 9 11 100 100
5 1 2 3 1 2
5 10 10 10 11 12
输出样例
-10 2 5 32 9 11 100
1 2 3
10 11 12
参考代码
#include <iostream>
using namespace std;
struct node
{
int num;
node *next;
};
int n;
void Create(node *head)
{
node *tail = head;
int d;
for (int i = 0; i < n; i++)
{
cin >> d;
node *s = new node; //创建新的节点
s->num = d;
s->next = NULL;
tail->next = s; //将新结点插入链表中
tail = s;
}
}
void Show(node *head)
{
node *s = head->next;
cout << s->num;
s = s->next;
while (s)
{
cout << " " << s->num;
s = s->next;
}
cout << endl;
}
int Delete(node *head)
{
node *p1, *p;
p1 = head->next;
while (p1)
{
p = p1;
while (p->next)
{
int f = 0;
if (p->next->num == p1->num)
{
node *t = p->next;
p->next = p->next->next;
delete (t);
t = NULL;
f = 1;
}
if (f == 0)
p = p->next;
}
p1 = p1->next;
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
cin >> n;
node *head = new node;
head->next = NULL;
Create(head);
Delete(head);
Show(head);
}
return 0;
}