数据结构实验之链表七:单链表中重复元素的删除

来源:互联网 发布:大数据商业价值 编辑:程序博客网 时间:2024/06/08 07:29

数据结构实验之链表七:单链表中重复元素的删除

Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic

Problem Description

按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。

Input

第一行输入元素个数 n (1 <= n <= 15);
第二行输入 n 个整数,保证在 int 范围内。

Output

第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。

Example Input

1021 30 14 55 32 63 11 30 55 30

Example Output

1030 55 30 11 63 32 55 14 30 21730 55 11 63 32 14 21
#include <stdio.h>struct node{    int data;    struct node *next;};struct node *create(int n){    int i;    struct node *head,*p;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    for(i=0;i<n;i++)    {        p=(struct node*)malloc(sizeof(struct node));        scanf("%d",&p->data);        p->next=head->next;        head->next=p;    }    return (head);};void print(struct node *p){    struct node *h=p->next;    while(h!=NULL)    {        if(h->next==NULL)        printf("%d",h->data);        else        printf("%d ",h->data);        h=h->next;    }}void num(struct node *p){    int i;    i=0;    struct node *h=p->next;    while(h!=NULL)    {        i++;        h=h->next;    }    printf("%d",i);}void del(struct node *h){    struct node *q,*p,*t;    p=h->next;    while(p!=NULL)    {        q=p;        while(q->next!=NULL)        {            if(p->data==q->next->data)            {                t=q->next;                q->next=t->next;                free(t);            }            else q=q->next;        }        p=p->next;    }}int main(){    int n;    scanf("%d",&n);    struct node *p;    p=create(n);    num(p);    printf("\n");    print(p);    printf("\n");    del(p);    num(p);    printf("\n");    print(p);    return 0;}
//C++
#include <iostream>using namespace std;typedef struct node{    int data;    node *next;};node *create(int n){    node *head,*p;    head=new node;    head->next=NULL;    for(int i=0;i<n;i++)    {        p=new node;        cin>>p->data;        p->next=head->next;        head->next=p;    }    return head;}void num(node *p){    int i=0;    node *h=p->next;    while(h)    {        i++;        h=h->next;    }    cout<<i<<endl;}void print(node *p){    node *h=p->next;    while(h)    {        cout<<h->data;        if(h->next!=NULL)            cout<<" ";        h=h->next;    }    cout<<endl;}void del(node *p){    node *q,*h,*t;    h=p->next;    while(h)    {        q=h;        while(q->next!=NULL)        {            if(h->data==q->next->data)            {                t=q->next;                q->next=t->next;                delete t;            }            else                q=q->next;        }        h=h->next;    }}int main(){    int n;    cin>>n;    node *q;    q=create(n);    num(q);    print(q);    del(q);    num(q);    print(q);    return 0;}
阅读全文
0 0
原创粉丝点击