题目形容
已知线性表中的元素以递增序列排列,并以单链表作存储构造。设计算法删除表中所有值雷同的多余元素(使得操作后的线性表中所有的值均不雷同),同时开释被删结点空间,并剖析算法的工夫复杂度。
输出
第一行输出一个正整数 n,示意元素个数,n<=100。
第二行输出 n 个正整数元素,保障元素以递增排列,元素的值 <=100。
输入
输入删除雷同元素后的链表。
样例输出
5
1 1 3 4 4
样例输入
1 3 4
C++ 代码实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
}LNode,*LinkList;
LinkList CreateList(LinkList& L, int n) {L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
LNode* s, * r = L;
int i = 0;
int x;
while (i < n) {scanf("%d", &x);
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = r->next;
r->next = s;
r = s;
i++;
}
r->next = NULL;
return L;
}
void PrintList(LinkList L) {
LNode* p = L->next;
while (p) {printf("%d", p->data);
p = p->next;
}
printf("\n");
}
void DeleteRepeated(LinkList& L) {
LNode* p = L->next;
LNode* q, * r;
while (p->next != NULL) {
q = p->next;
if (p->data == q->data) {
r = q->next;
p->next = r;
free(q);
}
else {p = p->next;}
}
}
int main() {
LinkList L;
int n;
scanf("%d", &n);
CreateList(L, n);
DeleteRepeated(L);
PrintList(L);
return 0;
}