【1139】数据结构上机测试2-2:单链表操作B

来源:互联网 发布:maven 指定java版本 编辑:程序博客网 时间:2024/05/18 22:42

数据结构上机测试2-2:单链表操作B

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

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

输入

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

输出

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

示例输入

1021 30 14 55 32 63 11 30 55 30

示例输出

1030 55 30 11 63 32 55 14 30 21730 55 11 63 32 14 21
#include<stdio.h>#include<stdlib.h>struct node{    int data;    struct node *next;};int main(){    int i,n,m,a,b,s=0;    struct node *head,*p,*q,*d,*tail;    scanf("%d",&n);    head=(struct node*)malloc(sizeof(struct node));    head->next=NULL;    for(i=0; i<n; i++)    {        q=(struct node*)malloc(sizeof(struct node));        scanf("%d",&q->data);        q->next=head->next;        head->next=q;    }    printf("%d\n",n);    d=head->next;    while(d!=NULL)    {        printf("%d",d->data);        if(d->next!=NULL)            printf(" ");        d=d->next;    }    printf("\n");    d=head->next;    while(d!=NULL)    {        p=d;        q=p->next;        while(q!=NULL)        {        if(d->data==q->data)        {            s++;        p->next=q->next;        q=q->next;        }        else        {          p=q;          q=q->next;        }        }        d=d->next;    }    printf("%d\n",n-s);    p=head->next;    while(p!=NULL)    {        printf("%d",p->data);        if(p->next!=NULL)            printf(" ");        p=p->next;    }    printf("\n");    return 0;}


0 0