您的位置:首页 > 其它

3597 Problem F 算法2-25 有序单链表删除重复元素

2018-02-09 21:37 417 查看
问题 F: 算法2-25 有序单链表删除重复元素

时间限制: 30 Sec 内存限制: 128 MB

献花: 30 解决: 17

[献花][花圈][TK题库]

题目描述

根据一个递增的整数序列构造有序单链表,删除其中的重复元素

输入

输入包括多组测试数据,每组测试数据占一行,第一个为大于等于0的整数n,表示该单链表的长度,后面跟着n个整数,表示链表的每一个元素。整数之间用空格隔开

输出

针对每组测试数据,输出包括两行,分别是删除前和删除后的链表元素,用空格隔开

如果链表为空,则只输出一行,list is empty

样例输入

5 1 2 3 4 5

5 1 1 2 2 3

0

样例输出

1 2 3 4 5

1 2 3 4 5

1 1 2 2 3

1 2 3

list is empty

#define _CRT_SECURE_NO_WARNINGS
#include <unordered_map>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <map>

using namespace std;

typedef struct LNode
{
int data;
LNode * next;
}LNode, *LinkList;

void CreateLink(LinkList &L,int n)
{
L = new LNode;
L->next = NULL;

int data;
LinkList p = L, q;

if (n == 0)
printf("list is empty\n");

else
{
for (int i = 0; i < n; ++i)
{
scanf("%d", &data);
q = new LNode;
q->data = data;
q->next = NULL;
p->next = q;

p = q;

printf("%d ", data);
}
printf("\n");
}
}

void DestoryList(LinkList &L)
{
LinkList p = L,q;
L = NULL;
while (p)
{
q = p->next;
delete p;
p = q;
}
}

void GetRidSameElem(LinkList & L)
{
LinkList p = L;
if (p->next)
p = p->next;
else
return;

LinkList q = p->next,tmp;
while (p && q)
{
if (p->data == q->data)
{
tmp = q;
q = q->next;
p->next = q;
delete tmp;
}
else
{
p = p->next;
q = q->next;
}
}
}

void PrintList(const LinkList L)
{
LinkList  p = L->next;
if (p)
{
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
}

int main()
{
#ifdef _DEBUG
freopen("data.txt", "r+", stdin);
#endif // _DEBUG

int n;
LinkList L;
while (EOF != scanf("%d", &n))
{
CreateLink(L,n);
GetRidSameElem(L);
PrintList(L);
DestoryList(L);
}

return 0;
}
/**************************************************************
Problem: 3597
User: Sharwen
Language: C++
Result: 升仙
Time:67 ms
Memory:4744 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeup 3597
相关文章推荐