删除相同元素(线性表)

删除相同元素(线性表)

时间: 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;
}
 

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注