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

来源:互联网 发布:mac air 13寸 壁纸 编辑:程序博客网 时间:2024/04/30 07:21

Problem Description

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

第一行输入元素个数n;
第二行输入n个整数。
Output

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

10
21 30 14 55 32 63 11 30 55 30
Example Output

10
30 55 30 11 63 32 55 14 30 21
7
30 55 11 63 32 14 21
Hint

Author

不得使用数组!

#include <stdio.h>#include <stdlib.h>struct node{    int date;    struct node *next;};struct node *creat(int n){    struct node *head,*p,*q;    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    while(n--)    {        p=(struct node*)malloc(sizeof(struct node));        scanf("%d",&p->date);        p->next=head->next;        head->next=p;    }    return head;};int del(struct node *head,int n){    struct node *p,*q,*t;    p=head->next;    while(p->next!=NULL)    {        q=p;        t=p->next;        while(t->next!=NULL)        {            if(t->date==p->date)            {                q->next=t->next;                free(t);                t=p->next;                n--;            }            else            {                q=t;                t=t->next;            }        }        if(t->next==NULL)        {            if(t->date==p->date)            {                q->next=NULL;                free(t);                n--;            }        }     p=p->next;    }    return n;}void show(struct node *head){    struct node *p;    p=head->next;    while(p!=NULL)    {        printf("%d",p->date);        if(p->next!=NULL)        {            printf(" ");        }        else            printf("\n");        p=p->next;    }}int main(){    int n,m;    scanf("%d",&n);    struct node *head;    head=creat(n);    printf("%d\n",n);    show(head);    m=del(head,n);    printf("%d\n",m);    show(head);    return 0;}
0 0
原创粉丝点击