问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

有一个带头结点的单链表,设计算法删除单链表中所以重复出现的结点,使得整型域相

发布网友 发布时间:2022-12-21 08:32

我来回答

1个回答

热心网友 时间:2023-10-10 01:07

//C/C++实现,从原链表中取不重复的放到另一个链表里,每个节点都从头开始比较(性能较差),释放原链表
//删除重复节点
typedef struct tagMyList
{
    int data;
    struct tagMyList *next;
}MyList;
MyList* deleteRepeatNode(MyList *l);
void freeList(MyList *l)
{
    MyList *t = l->next;
    while (t)
    {
        MyList *t_next = t->next;
        free(t);
        t = t_next;
    }
}
void printfList(MyList *l)
{
    MyList *t = l->next;
    while (t)
    {
        printf("%d ", t->data);
        t = t->next;
    }
    printf("\n");
}
/*
test:
input:  4 2 3 3 4 4 0 4 2 1
output: 0 1
*/
void deleteRepeatNodeTest()
{
    int length = 10;
    MyList *result;
    MyList *l = (MyList *)malloc(sizeof(MyList));
    l->next = NULL;
    for (int i = 0; i < length; i++)
    {
        MyList *t = (MyList *)malloc(sizeof(MyList));
        t->data = rand()%5;
        t->next = l->next;
        l->next = t;
    }
    printfList(l);
    result = deleteRepeatNode(l);
    printfList(result);
}
/*
* 算法方式,从原链表中取不重复的放到另一个链表里,
*/
MyList* deleteRepeatNode(MyList *l)
{
    MyList *head = l;
    
    MyList *p1 = head->next;
    MyList *p2 = p1;
    MyList *p2_prev = head;
    MyList *pResult = NULL;
    MyList *pResultTail = NULL;
    while (p2)
    {     
        p1 = head->next;
        while (p1)
        {
            if (p2 != p1 && p1->data == p2->data)
            {
                break;
            }
            p1 = p1->next;
        }
        if (p1 == NULL)
        {
            if (p2 == head->next)
            {
                head->next = p2->next;
            }
            else
            {
                p2_prev->next = p2->next;
            }
            if (pResult == NULL)
            {
                pResult = p2;
                pResultTail = pResult;
                pResultTail->next = NULL;
            }
            else
            {
                pResultTail->next = p2;
                pResultTail = p2;
                pResultTail->next = NULL;
            }
            p2 = p2_prev->next;
            
        }
        else
        {
            p2_prev = p2;
            p2 = p2->next;
        }
    }
    freeList(head);
    head->next = pResult;
    return head;
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宁波社保卡办理需要什么材料 宁波社保卡如何申领 有什么高性价比的隔离霜可以推荐? 防晒效果好的隔离霜有哪些值得入手? 下雨天经常爬在房子墙上的那种软体动物,不是蜗牛没壳的,可以在墙上把身... 原来是美男啊里面插曲、主题曲都有哪些? 请问下各位大虾,我在外地用外地农行卡网上转账到本地邮政卡星期六转账的... 为什么用支付宝买东西明明我余额足够,付款时却说我余额不足?2个... 萍乡烛式过滤器品牌 衡水烛式过滤器品牌推荐 写出将一单链表中所有值相同的重复结点删除,使所得结果表中各结点值均不相同的算法 疫情中同管和次管是什么意思 核酸检测拆管是什么意思 核酸拆管是什么意思 二行爆管是什么意思 核酸串管是什么意思 有人打电话说核酸检测爆管是真的吗 10混1爆管是什么意思 你知道猪肉身上盖的红章蓝章有什么区别吗? 小鲸鱼儿童智能电话手表cyc怎么使用4g流量 Zabar的《Dumbek!》 歌词 locol bar什么意思 Bar Opener 学英语|《老友记》s1e4 part2 barfriends是什么意思 网易的人脸识别可以用照片吗 杜娟花打包为什么干枯 每天看英文屏道20分钟,多久能学英文水平? 每日英语听力电脑端视频打不开 zara中国官网的电子邮件怎么设置 试设计实现在单链表中删去值相同的多余节点的算法 艾肯micuvst机架有内放不 貔貅手串断了有什么说法吗? 妈妈不烦【21天行动营】大总结 21天充电行动(破茧成蝶第一天) 21天摆脱“不懂拒绝的老好人”性格 妈妈不烦21天行动营感受 【妈妈不烦】21天的超值行动营,我收获了什么? 哈尔滨温泉度假应该去哪,一边泡温泉一边吃烧烤,可行吗? 《 水浒传》第三十回概括 丁香花是木本还是草本啊? 丁香花和康乃馨是同一种花吗 润配什么字农业公司起名含有木的含义 tcl三d智能电视怎么连接wifi tcl电视55d6图像设置 快手音乐卡路飞叫什么 海贼王搞笑剪辑:永远也无法想象路飞跟乔巴到底有多蠢 海贼王视频!!! 在快手怎样才能看多一点路飞的视频 淘宝路飞老师怎么样