zoukankan      html  css  js  c++  java
  • 数据结构实验之链表七:单链表中重复元素的删除

    题目描述

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

    输入

    第一行输入元素个数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

    提示

     

    来源

    不得使用数组!

    示例程序

    View Code
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 typedef struct node
     4 {
     5     int data;
     6     struct node *next;
     7 }st;
     8 void traverse(st *head)
     9 {
    10     st *p;
    11     p = head->next;
    12     while(p->next)
    13     {
    14         printf("%d ",p->data);
    15         p = p->next;
    16     }
    17     printf("%d\n",p->data);
    18 }
    19 st *creat(int n)
    20 {
    21     st *head,*p;
    22     int t;
    23     head = (st *)malloc(sizeof(st));
    24     head->next = NULL;
    25     t = n;
    26     while(n--)
    27     {
    28         p = (st *)malloc(sizeof(st));
    29         scanf("%d",&p->data);
    30         p->next = head->next;
    31         head->next = p;
    32     }
    33     printf("%d\n",t);
    34     traverse(head);
    35     return head;
    36 }
    37 void del(st *head,int n)
    38 {
    39     st *p,*q,*t;
    40     int i = 0,flag = 1;
    41     p = head->next;
    42     t = p;
    43     while(p)
    44     {
    45         t = p;
    46         q = p->next;
    47         while(q)
    48         {
    49             if(q->data!=p->data)
    50             {
    51                 q = q->next;
    52                 t = t->next ;
    53             }
    54             else
    55             {
    56                 t->next = q->next;
    57                 free(q);
    58                 i++;
    59                 q = t->next;
    60                 flag = 0;
    61             }
    62         }
    63         p = p->next;
    64     }
    65     printf("%d\n",n-i);
    66     traverse(head);
    67 }
    68 int main()
    69 {
    70     st *head;
    71     int n;
    72     scanf("%d", &n);
    73     head = creat(n);
    74     del(head,n);
    75     return 0;
    76 }
  • 相关阅读:
    图像处理——灰度化、二值化、膨胀算法、腐蚀算法以及开运算和闭运算
    HDU-4902-Nice boat
    虚拟化之vmware-vsphere概念,原理,功能
    java实现第四届蓝桥杯黄金连分数
    java实现第四届蓝桥杯黄金连分数
    java实现第四届蓝桥杯黄金连分数
    java实现第四届蓝桥杯黄金连分数
    java实现第四届蓝桥杯振兴中华
    java实现第四届蓝桥杯振兴中华
    java实现第四届蓝桥杯振兴中华
  • 原文地址:https://www.cnblogs.com/yelan/p/2872352.html
Copyright © 2011-2022 走看看