删除相同元素(线性表)
时间: 1ms 内存:128M
描述:
(线性表)在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。
输入:
输入长度:6
输入数据:2 3 4 5 5 7
输出:
2 3 4 5 7
示例输入:
6
8 9 10 11 22 22
示例输出:
8 9 10 11 22
提示:
参考答案(内存最优[0]):
#include<stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
} LinkList;
int main()
{
int n,a[80],i;
LinkList *L,*pre,*r,*s;
scanf("%d",&n);
for(i=0; i<n; i++)
scanf("%d",&a[i]);
L=((LinkList *)malloc(sizeof(LinkList)));
r=L;
for(i=0; i<n; i++)
{
s=((LinkList *)malloc(sizeof(LinkList)));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
pre=L->next;
while(pre!=NULL&&pre->next!=NULL)
{
if(pre->data==pre->next->data)
{
LinkList *p;
p=pre->next;
pre->next=pre->next->next;
free(p);
}
pre=pre->next;
}
pre=L->next;
while(pre!=NULL)
{
printf("%d ",pre->data);
pre=pre->next;
}
pre=L;
LinkList *p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
int main()
{
int a[100]={0},i,j,n;
int* p;
while(scanf("%d",&n)!=EOF)
{
p=&a[0];
int w=0;
getchar();
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{
int k=0;
for(j=i+1;j<=n;j++)
{
if(a[i]==a[j]) {k=1;break;}
}
if(k==0) {*p=a[i];p++;w++;}
}
p=&a[0];
for(i=0;i<w;p++,i++)
printf("%d ",*p);
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。