单链表合并,多项式相加问题

多项式的相加问题

笔记原因

网上很多的利用单链表计算多项式的和,会出现问题,例如
a 1 2 1 2
b 1 2 1 2
这两个多项式相加,有两次相等的情况按照他们的方法会建立两个节点

解决方法

//用于多项式相加
//要先对p1,p2排序好,升序
while((p1!=NULL)&&(p2!=NULL)){//两个都没到尾巴就循环
		//p1小的情况
		if(p1->up<p2->up){
			if(p3->up!=p1->up){//与p3的指数不相等的时候,就向后移动,并连接p1
				p3->next=p1;
				p3=p1;
				p3->next=NULL;
			}
			else{//p1与p3的指数相等的时候,改变底数的值,不移动p3
				p3->down=p3->down+p1->down;
				p1=p1->next;
			}
		}
		//重点注意的是,p3的位置在两数相等的时候,只是移动到了两个相等数中的其中的一个的位置,
        //还可以通过p3判断后续,是否有与改两个数相等的数
		else if(p1->up==p2->up){
		/*相等分两种情况,1、上一次保存的p3的指数与该次仍然相等;2、第一次碰到指数相等*/
			if(p3->up==p1->up){//第二次还是同样指数的情况
				p3->up=p1->up;
				p3->down=p3->down+p1->down+p2->down;
				p1=p1->next;
				p2=p2->next;
			}
			else{//第一次碰到指数相等的情况
				p3->next=p1;
				p3=p1;
				p3->down=p1->down+p2->down;
				p1=p1->next;
				p2=p2->next;
				p3->next=NULL;//一定要写在最后,写在p1位置改变之前,会影响p1
			}
		}
		//p2小的情况
		else{
			if(p3->up!=p2->up){//与p3的指数不相等的时候,就向后移动,并连接p2
				p3->next=p2;
				p3=p2;
				p3->next=NULL;
			}
			else{//p2与p3的指数相等的时候,改变底数的值,不移动p3
				p3->down=p3->down+p2->down;
				p2=p2->next;
			}
		}
	}
	//最后处理,有一个没循环完
	p3->next=p1?p1:p2;
	

拓展

这种方法也可以用于,单链表的合并去重的操作。

创作仅为了做个笔记,如有不足,希望批评指正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值