首页 > 代码库 > 两个多项式相加 ( C++ )
两个多项式相加 ( C++ )
实现两个多项式进行相加 不开辟空间 ( 这要求实现进行相加,代价为两个原链表将被修改)
分析:
this>other 就把other当前结点放置在this之前
this<other 就this当前结点前移一位,并且后继也前移一位
this==other 求和为0就删除,并全部前移一位,不等就删除other中的当前结点并前移
注意:
必须注意 n 作为始终指向 mHead, n->next 始终指向other链表的下一个结点,所以修改了other链表时候必须注意 n->next的指向
有些书上 C语言实现的多项式之和,如果 修改对应的代码植入于C++中,能够得到正确结果,但是 C++ 的析构函数将会出错,故此要将 other 表中的指针 n 指向明确
1 void Link::Add( Node * mHead) { 2 Node * ph = Head->Next; 3 Node * pm = mHead->Next; 4 Node * m = Head; //作为一个标记,标记this上一次访问的结点 5 Node * n = mHead; // n 始终指向头结点,并且 n->next指向 pm 的下一个结点元素 6 7 while( ph!=NULL && pm!=NULL) { // 判断当 A 或 B 两个链表不为空时 8 if( ph->Index>pm->Index) { //this>other ,将other的第一个结点插入到 this当前结点之前 9 n->Next = pm->Next; // 让 n 的 next指针指向 pm的下一个结点, 10 m->Next = pm; 11 m = pm; 12 m->Next = ph; 13 pm = n->Next; // 上述将 pm 插入时,将 pm 指向下一个结点,即 n->enxt 14 } 15 else if( ph->Index<pm->Index) { //this<other 只需要将this的结点后移一位,注意 m 始终未 this的上一个结点 16 m = ph; 17 ph = ph->Next; 18 } 19 else { //this==other 20 Node * tem; 21 if( ph->Ratio+pm->Ratio==0) { // 求和为0 将this的当前结点删除,并且后移一位 22 tem = ph; 23 ph = ph->Next; 24 Delete(tem); 25 } 26 else { //求和不为0, 将系数相加 27 ph->Ratio = ph->Ratio+pm->Ratio; 28 } // 当相等时,都要删除掉other的当前结点,并后移一位 29 tem = pm; 30 pm = pm->Next; 31 n->Next = pm; // 32 Delete(tem); 33 } 34 } 35 if( ph==NULL) { // 由于当other > this时,只将this后移,所以 pm 为空表示都插入进去,不为空时, 36 m->Next = pm; // 表示this的链表为空了,所以将other剩下的链表插入 this 的表尾,即 n 指向最后一个结点 n->next正好是表尾指针 37 n->Next = NULL; // 设置表尾为空 38 } 39 } 40 void Link::Delete(Node * tem) { // 删除结点 tem 41 delete tem; 42 }
两个多项式相加 ( C++ )
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。