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


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

    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;
    }
    


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    Pentaho
    知识地图
    分享学习笔记本
    2015-7-1 记而随,随而记
    web 导出 csv
    vs2013 密钥
    超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
    如何绘制业务流程图?
    总是保存下拉选项的第一个值
    mac 修改密码后 频繁输入钥匙串问题修复方法
  • 原文地址:https://www.cnblogs.com/6bing/p/3931259.html
Copyright © 2011-2022 走看看