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



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

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

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

    输入

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

    提示

     

    来源

    不得使用数组!

    #include<stdio.h>
    #include<stdlib.h>
    
    struct node
    {
        int data;
        struct node *next;
    };
    
    void delete1(struct node *head, int n)
    {
        int i, count=0;
        struct node *p, *q, *r;
        p = head->next;
        q = p;
        while(p)
        {
            while(q->next)
            {
               if(p->data == q->next->data)
               {
                   r = q->next;
                   q->next = r->next;
                   free(r);
                   count++;
               }
               else
                q = q->next;
            }
            p = p->next;
            q = p;
        }
        printf("%d
    ", n-count);
        head = head->next;
        for(i=0; i<n-count; i++)
        {
            printf("%d", head->data);
            if(i==n-count-1)
                printf("
    ");
            else
                printf(" ");
            head = head->next;
        }
    
    }
    
    int main()
    {
        int n, i;
        struct node *head, *p, *q;
        head = (struct node *)malloc(sizeof(struct node));
        head->next = NULL;
        q = head;
        scanf("%d", &n);
        for(i=0; i<n; i++)
        {
            p = (struct node *)malloc(sizeof(struct node));
            scanf("%d", &p->data);
            p->next = head->next;
            head->next = p;
        }
        printf("%d
    ", n);
        q = q->next;
        for(i=0; i<n; i++)
        {
            printf("%d", q->data);
            if(i==n-1)
                printf("
    ");
            else
                printf(" ");
            q = q->next;
        }
        delete1(head, n);
    
        return 0;
    }
    


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    Windows Live Writer Testing
    基于本地文件系统的LocalDB
    【笔记】动画显示窗体
    winform无边框窗口拖动
    关于js的内存机制
    flex-basis
    Cookie、session和localStorage、以及sessionStorage之间的区别
    关于报文
    关于http与https Tcp的三次握手四次握手
    关于前后端分离与不分离
  • 原文地址:https://www.cnblogs.com/6bing/p/3931259.html
Copyright © 2020-2023  润新知