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

  1. 题目描述

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

    输入

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

    输出

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

    示例输入

    10
    21 30 14 55 32 63 11 30 55 30

    示例输出

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

  2. #include<stdio.h>   
  3. #include<stdlib.h>   
  4. struct node   
  5. {   
  6.     int  date;   
  7.     struct node *next;   
  8. };   
  9. struct node *head,*p,*q,*tail;   
  10. int main()   
  11. {   
  12.     int n,t;   
  13.     scanf("%d",&n);   
  14.     t=n;   
  15.     head=(struct node*)malloc(sizeof(struct node)*1);   
  16.     head->next=NULL;   
  17.     while(n--)   
  18.     {   
  19.         if((p=(struct node*)malloc(sizeof(struct node)*1))==NULL)   
  20.             return 0;   
  21.         scanf("%d",&p->date);   
  22.         p->next=head->next;   
  23.         head->next=p;   
  24.     }   
  25.     printf("%d\n",t);   
  26.     q=head->next;   
  27.     while(q!=NULL)   
  28.     {   
  29.         printf("%d",q->date);   
  30.         if(q->next!=NULL)   
  31.             printf(" ");   
  32.         q=q->next;   
  33.     }   
  34.     printf("\n");   
  35.     q=head;   
  36.     while(q!=NULL)   
  37.     {   
  38.         tail=q;p=tail->next;   
  39.         while(p!=NULL)   
  40.         {   
  41.             if(q->date==p->date)   
  42.             {   
  43.                 tail->next=p->next;   
  44.                 t--;   
  45.             }   
  46.             else  
  47.                 {   
  48.   
  49.                 tail=tail->next;   
  50.             }   
  51.             p=p->next;   
  52.         }   
  53.         q=q->next;   
  54.     }   
  55.     printf("%d\n",t);   
  56.     q=head->next;   
  57.     while(q!=NULL)   
  58.     {   
  59.         printf("%d",q->date);   
  60.         if(q->next!=NULL)   
  61.             printf(" ");   
  62.         q=q->next;   
  63.     }   
  64.     printf("\n");   
  65.     return 0;   
  66. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值