标题:链表删除重复数字求解
只看楼主
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
结帖率:58.33%
已结贴  问题点数:30 回复次数:7 
链表删除重复数字求解
【问题描述】试编写算法删除以 L 为头指针(带头结点)的单链表中重复出现的元素。

【输入形式】元素个数
                    按照任意顺序输入多个正整数,每个数之间用一个空格隔开

【输出形式】删除重复元素后的数据,数据之间用空格隔开
【样例输入】 7
       6 6 7 8 9 10 11
【样例输出】 6 7 8 9 10 11

大佬们帮帮我
搜索更多相关主题的帖子: 重复 输入 删除 数字 元素 
2020-05-08 23:10
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
大佬们只需要教教我怎么删除,读入,输出我写

2020-05-08 23:14
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:5 
递归  倒序处理   L*  (L*, array[])
2020-05-09 08:33
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
我……
2020-05-09 09:38
星泪成寒
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:75
专家分:539
注 册:2013-5-19
得分:25 
程序代码:
#include <stdio.h>
#include <stdlib.h>

#define N 1000

 
typedef struct _node {
    int data;
    struct _node *next;
} node_t;

int main(int argc, const char * argv[])
{
    int i,num = 0;
    int input;
    int array[N] = {0}; //hash表
    node_t *L;
    node_t *head;
    
    //头指针(无数据)
    L = (node_t*)calloc(sizeof(node_t), 1);
    head = L;
    
    //获取输入个数
    scanf("%d", &num);
    
    //获取全部输入
    for (i = 0; i < num; ++i) {
        scanf("%d",&input);
        if (array[input] != 0) {//数据已存在,则不加入链表
            continue;
        }
        array[input] = 1;//hash表置位
        head->next = (node_t*)malloc(sizeof(node_t));
        head = head->next;
        head->data = input;
        head->next = NULL;
    }
    
    //输出
    head = L->next;
    while (head) {
        printf("%d ", head->data);
        head = head->next;
    }
    
    //释放内存
    while (L) {
        head = L;
        L = L->next;
        free(head);
    }

    return 0;
}

2020-05-09 10:57
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
回复 5楼 星泪成寒
非常感谢,你能帮我看看另一道题吗?在板块上面 链表的删除那个
2020-05-09 11:40
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
得分:0 
因为从你的样例输入和输出里,可以看出删除的重复元素为后保留,也就是重复的元素删除的是前面的,保留的是最后一个
所以用递归来倒序处理
当然也可以   先翻转链表,去重,然后再翻转链表
程序代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

typedef struct _node {
    int data;
    struct _node *next;
} node_t;

node_t * removePreRepeatElement(node_t*, int [], int);

int main(int argc, const char * argv[]){
    int i, num = 0;
    int input;
    node_t *L;
    printf("初始化链表,请输入元素个数:\n");
    scanf("%d", &num);
    printf("请依次输入各个元素:\n");
    node_t *loop = (node_t*)malloc(sizeof(node_t));
    L = loop;
    for (i = 0; i < num; ++i) {
        scanf("%d", &input);
        node_t * innerLoop = loop;
        if (0 != i){
            innerLoop = (node_t*)malloc(sizeof(node_t));
            loop->next = innerLoop;
            loop = loop->next;
        }
        loop->data = input;
        loop->next = NULL;
    }
    int arr[1000] = { 0 };
    L = removePreRepeatElement(L, arr, num);

    //输出
    loop = L;
    while (loop) {
        printf("%d ", loop->data);
        loop = loop->next;
    }

    //释放内存
    while (L) {
        loop = L;
        L = L->next;
        free(loop);
    }

    return 0;
}


node_t * removePreRepeatElement(node_t* node, int *v, int total) {
    node_t * loop = NULL;
    if (NULL != node->next) {
        loop = removePreRepeatElement(node->next, v, total);
    }
    int isExist = 0;
    int j = 0;
    for (int i = 0; i < total; i++) {
        if (0 == *(v + i)) j = i;
        if (node->data == *(v + i)) {
            isExist = 1;
        }
    }
    if (!isExist) {
        *(v + j) = node->data;
        node->next = loop;
        return node;
    }
    else {
        free(node);
        return loop;
    }    
}

初始化链表,请输入元素个数:
8
请依次输入各个元素:
7
6
6
7
8
9
10
11
6 7 8 9 10 11
2020-05-09 12:53
D2284581470
Rank: 3Rank: 3
来 自:沈阳
等 级:论坛游侠
威 望:2
帖 子:169
专家分:147
注 册:2019-12-8
得分:0 
回复 7楼 fulltimelink
谢谢,链表感觉自己很迷
2020-05-09 14:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501499-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032329 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved