VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 491|回复: 4

[求助] 链表问题

[复制链接]
83_avatar_middle
在线会员 helloworld! 发表于 2018-10-11 16:17:26 | 显示全部楼层 |阅读模式
3驿站币
listnode *Mult(listnode *Head_a, listnode *Head_b)
{
        listnode *p,*p1,*p2,*p3,*pa, *pb,*pc,*pre,*pc1;
        pa = Head_a->next;
        pb = Head_b->next;
        CreateNode(Head_c);
        pre = Head_c;
       
        while (pa)
        {
                while (pb)
                {
                        if (NULL == (pc = (Node)malloc(sizeof(listnode))))
                        {
                                printf("开辟节点失败\n");
                                exit(0);
                        }
                        if (pa->exp == pb->exp)
                        {
                                pc->coef = pa->coef*pb->coef;
                                pc->exp = pa->exp + pb->exp;
                                pre->next = pc;
                                pre = pc;
                                pc->next = NULL;
                        }
                        else
                        {
                                pc->coef = pa->coef*pb->coef;
                                pc->exp = pa->exp;
                                if (NULL == (pc1 = (Node)malloc(sizeof(listnode))))
                                {
                                        printf("开辟节点失败\n");
                                        exit(0);
                                }
                                pre->next = pc;
                                pc->next = pc1;
                                pre = pc;
                                pc = pc1;
                                pc1->coef = pa->coef *pb->exp;
                                pc1->exp = pb->exp;
                                pc->next = NULL;
                        }
                        pb = pb->next;
                }
                pa = pa->next;
        }
        p = Head_c->next;
        p1 = p;
        p2 = p->next;
        p3 = p2->next;
        while (p)
        {
                while (p2)
                {
                        if (p->exp == p2->exp)
                        {
                                p->coef += p2->coef;
                                p1->next = p3;
                                delete p2;
                                p3 = p3->next;
                        }
                        else
                        {
                                p1 = p2;
                                p2 = p3;
                                p3 = p3->next;
                        }
                }
                p = p->next;
        }
        return Head_c;
}

写了个链表的多项式乘法,我的想法是把两个链表的所有乘积写到另一个链表中,再来遍历第三个链表但是在遍历的过程中,p3->NULL 出错了。链表之间进行赋值,只是把指针换了,但指针指向的内存还是同一块是吗?什么时候需要为链表节点开辟空间,有点不太理解,可以指导一下吗?





上一篇:新手上路,用哪个VS版比较好?
下一篇:使用WinSock发送httpGET请求出错

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-10-11 21:47:18 | 显示全部楼层
遍历的过程中先判断 p3 是否为 NULL,不为NULL的话才能访问 p3->NULL

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

83_avatar_middle
ico_lz  楼主| helloworld! 发表于 2018-10-13 12:58:24 | 显示全部楼层
p = Head_c->next;
        p1 = p;
        p2 = p->next;
        while (p)
        {
                while (p2)
                {
                        if (p->exp == p2->exp)
                        {
                                temp = p2;
                                p->coef += p2->coef;
                                p1->next = p2->next;
                                p2 = p2->next;
                                DeleteNode(temp);
                        }
                        else
                        {
                                p1 = p2;
                                p2 = p2->next;
                        }
                        printf("循环\n");
                }
                p = p->next;
                p2 = p->next;
                printf("\n\n");
                printf("deer\n");
        }



这个内循环死循环了,哪里错了呢?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

86_avatar_middle
在线会员 mango_pi0001 发表于 2018-10-16 11:20:47 | 显示全部楼层
来学习一下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

83_avatar_middle
ico_lz  楼主| helloworld! 发表于 2018-10-18 16:56:15 | 显示全部楼层
内循环少了一个
p1 = p;

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-14 14:59

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表