单链表中重复元素的删除

来源:互联网 发布:淘宝卖家开通子账号 编辑:程序博客网 时间:2024/05/22 11:39

链表七:单链表中重复元素的删除
Time Limit: 1000MS Memory Limit: 65536KB
SubmitStatistic
Problem Description

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

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

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