题目形容
已知线性表中的元素以递增序列排列,并以单链表作存储构造。设计算法删除表中所有值雷同的多余元素(使得操作后的线性表中所有的值均不雷同),同时开释被删结点空间,并剖析算法的工夫复杂度。
输出
第一行输出一个正整数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;}