1. 程式人生 > >一元多項式相加

一元多項式相加

package Linear;
/*
 * 一元多項式相加:ha指向表頭結點,hb指向表頭結點,將倆多項式相加,並加入p表。
 * 
 * 補充知識點:
 * 釋放p結點操作 1、Node t=p; t=null;
 */

public class C {
	public static void Add(multipleNode ha,multipleNode hb) {
		multipleNode p =ha.next;
		multipleNode pre=ha;	//pre永遠指向p的前一結點
		multipleNode q=hb.next;
		while(p!=null&&q!=null) {
			if (p.exp<q.exp) {	//p指數小於q指數
				pre=p;
				p=p.next;
			}else if(p.exp==q.exp) {	//p指數等於q指數
				int x=p.coef+q.coef;
				if(x==0) {				//係數相加為0,刪除結點
					pre.next=p.next;
					p=null;
					p=pre.next;
				}else {					//相加不為0,將q點加入p表(即刪除q結點,p修改係數)
					p.coef=x;
					multipleNode t =q;
					q=q.next;
					t=null;
				}
			}else {						//p指數大於q指數,將q加入p表(即將q結點插入在p結點之前)
				multipleNode t =q.next;
				q.next=p;
				pre.next=q;
				pre=q;
				q=t;
			}
		}
		if (q!=null) {
			p.next=q;
		}
		hb.next=null;
		hb=null;
	}
	public static void main(String[] args) {
		int[][] arrA=new int[][]{{1,2},{2,3}};
		int[][] arrB=new int[][]{{1,1},{2,2}};
		multipleNode A=NodeTool.CreateNodeList(arrA);
		multipleNode B=NodeTool.CreateNodeList(arrB);
		NodeTool.traverseWithHead(A);
		NodeTool.traverseWithHead(B);
		Add(A, B);
		NodeTool.traverseWithHead(A);
		NodeTool.traverseWithHead(B);
	}

}