这个方法里面,用的那个AddPoly的用法可以get下,实验课老师写的太没有实用性了
package polynolist;
public class polynolist {
public Node head;
public Node tail;
public Node pointer;
public polynolist( )
{
head=new Node();
tail=head;
}
public void PrintList()
{
pointer=head.next();
while(pointer.getCoeff()==0)
pointer=pointer.next();
if((pointer.getCoeff()==1)&&(pointer.getExpon()==1)) System.out.print("x");
if((pointer.getCoeff()==1)&&(pointer.getExpon()==0)) System.out.print(pointer.getCoeff());
if((pointer.getCoeff()==1)&&(pointer.getExpon()>1)) System.out.print("x^"+pointer.getExpon());
if((pointer.getCoeff()>1)&&(pointer.getExpon()==1)) System.out.print(pointer.getCoeff()+"x");
if((pointer.getCoeff()>1)&&(pointer.getExpon()==0)) System.out.print(pointer.getCoeff());
if((pointer.getCoeff()>1)&&(pointer.getExpon()>1)) System.out.print(pointer.getCoeff()+"x^"+pointer.getExpon());
if((pointer.getCoeff()==-1)&&(pointer.getExpon()==1)) System.out.print("-x");
if((pointer.getCoeff()==-1)&&(pointer.getExpon()==0)) System.out.print(pointer.getCoeff());
if((pointer.getCoeff()==-1)&&(pointer.getExpon()>1)) System.out.print("-x^"+pointer.getExpon());
if((pointer.getCoeff()<-1)&&(pointer.getExpon()==1)) System.out.print(pointer.getCoeff()+"x");
if((pointer.getCoeff()<-1)&&(pointer.getExpon()==0)) System.out.print(pointer.getCoeff());
if((pointer.getCoeff()<-1)&&(pointer.getExpon()>1)) System.out.print(pointer.getCoeff()+"x^"+pointer.getExpon());
pointer=pointer.next();
while(pointer!=null)
{
if((pointer.getCoeff()==1)&&(pointer.getExpon()==1)) System.out.print("+"+"x");
if((pointer.getCoeff()==1)&&(pointer.getExpon()==0)) System.out.print("+"+pointer.getCoeff());
if((pointer.getCoeff()==1)&&(pointer.getExpon()>1)) System.out.print("+"+"x^"+pointer.getExpon());
if((pointer.getCoeff()>1)&&(pointer.getExpon()==1)) System.out.print("+"+pointer.getCoeff()+"x");
if((pointer.getCoeff()>1)&&(pointer.getExpon()==0)) System.out.print("+"+pointer.getCoeff());
if((pointer.getCoeff()>1)&&(pointer.getExpon()>1)) System.out.print("+"+pointer.getCoeff()+"x^"+pointer.getExpon());
if((pointer.getCoeff()==-1)&&(pointer.getExpon()==1)) System.out.print("-x");
if((pointer.getCoeff()==-1)&&(pointer.getExpon()==0)) System.out.print(pointer.getCoeff());
if((pointer.getCoeff()==-1)&&(pointer.getExpon()>1)) System.out.print("-x^"+pointer.getExpon());
if((pointer.getCoeff()<-1)&&(pointer.getExpon()==1)) System.out.print(pointer.getCoeff()+"x");
if((pointer.getCoeff()<-1)&&(pointer.getExpon()==0)) System.out.print(pointer.getCoeff());
if((pointer.getCoeff()<-1)&&(pointer.getExpon()>1)) System.out.print(pointer.getCoeff()+"x^"+pointer.getExpon());
pointer=pointer.next();
}
System.out.println();
}
public void AddPoly(int coeff,int expon)
{
Node node=new Node(coeff,expon);
tail.LinkList(node);
tail=node;
}
public void PolyBigExpon()
{
System.out.println(tail.getExpon());
}
//多项式加法
public void PolyAdd(polynolist blist)
{
polynolist result=new polynolist();
Node apointer=head.next();
Node bpointer=blist.head.next();
while(apointer!=null&&bpointer!=null)
{
if(apointer.getExpon()==bpointer.getExpon())
{
int a=apointer.getCoeff()+bpointer.getCoeff();
if(a!=0)
{
result.AddPoly(a, apointer.getExpon());
apointer=apointer.next();
bpointer=bpointer.next();
}
}
else if(apointer.getExpon()<bpointer.getExpon())
{
result.AddPoly(apointer.getCoeff(), apointer.getExpon());
apointer=apointer.next;
}
else if(apointer.getExpon()>bpointer.getExpon())
{
result.AddPoly(bpointer.getCoeff(), bpointer.getExpon());
bpointer=bpointer.next();
}
}
while(apointer!=null)
{
result.AddPoly(apointer.getCoeff(), apointer.getExpon());
apointer=apointer.next();
}
while(bpointer!=null)
{
result.AddPoly(bpointer.getCoeff(), bpointer.getExpon());
bpointer=bpointer.next();
}
result.PrintList();
}
//多项式减法
public void PolyMin(polynolist blist)
{
polynolist result=new polynolist();
Node apointer=head.next();
Node bpointer=blist.head.next();
while(apointer!=null&&bpointer!=null)
{
if(apointer.getExpon()==bpointer.getExpon())
{
int a=apointer.getCoeff()-bpointer.getCoeff();
if(a!=0)
{
result.AddPoly(a, apointer.getExpon());
apointer=apointer.next();
bpointer=bpointer.next();
}
else
{
apointer=apointer.next();
bpointer=bpointer.next();
}
}
else if(apointer.getExpon()<bpointer.getExpon())
{
result.AddPoly(apointer.getCoeff(), apointer.getExpon());
apointer=apointer.next;
}
else if(apointer.getExpon()>bpointer.getExpon())
{
result.AddPoly(-bpointer.getCoeff(), bpointer.getExpon());
bpointer=bpointer.next();
}
}
while(apointer!=null)
{
result.AddPoly(apointer.getCoeff(), apointer.getExpon());
apointer=apointer.next();
}
while(bpointer!=null)
{
result.AddPoly(-bpointer.getCoeff(), bpointer.getExpon());
bpointer=bpointer.next();
}
result.PrintList();
}
//多项式求导
public void PolyDiff()
{
polynolist result=new polynolist();
Node pointer=head.next();
while(pointer!=null)
{
result.AddPoly(pointer.getCoeff()*pointer.getExpon(), pointer.getExpon()-1);
pointer=pointer.next();
}
result.PrintList();
}
//多项式乘法
public void PolyMulti(polynolist list)
{
polynolist result=new polynolist();
Node apointer=head.next();
int rcurrent=1;
while(apointer!=null)
{
Node bpointer=list.head.next();
while(bpointer!=null)
{
int co=apointer.getCoeff()*bpointer.getCoeff();
int ex=apointer.getExpon()+bpointer.getExpon();
Node rpointer=result.head;
Node r=rpointer;
if(rcurrent==1)
{
result.AddPoly(co, ex);
rcurrent++;
}
else
{
boolean check=false;
while(rpointer!=null)
{
if(ex==rpointer.getExpon())
{
check=true;
rpointer.setCoeff(rpointer.getCoeff()+co);
break;
}
else if(ex>rpointer.getExpon())
{
r=rpointer;
rpointer=rpointer.next();
}
else if(ex<rpointer.getExpon())
{
check=true;
Node node=new Node(co,ex);
node.LinkList(rpointer);
r.LinkList(node);
}
}
if(check==false) result.AddPoly(co, ex);
}
bpointer=bpointer.next();
}
apointer=apointer.next();
}
result.PrintList();
}
}
class Node{
public Node next;
public int coeff;
public int expon;
public Node()
{
}
public Node(int coeff,int expon)
{
this.coeff=coeff;
this.expon=expon;
}
public Node next()
{
return this.next=next;
}
public int getCoeff()
{
return this.coeff;
}
public int getExpon()
{
return this.expon;
}
public void LinkList(Node node)
{
this.next=node;
}
public void setCoeff(int coeff)
{
this.coeff=coeff;
}
public void setExpon(int expon)
{
this.expon=expon;
}
}
package polynolist;
import java.util.Scanner;
public class polylisttest {
public static void main(String[] args)
{
Scanner input=new Scanner (System.in);
int coeff,expon;
//输入第一个多项式链表
System.out.println("请输入第一个多项式的长度");
int n=input.nextInt();
System.out.println("请输入第一个多项式");
polynolist alist=new polynolist();
for(int i=0;i<n;i++)
{
coeff=input.nextInt();
expon=input.nextInt();
alist.AddPoly(coeff, expon);
}
//输入第二个多项式
System.out.println("请输入第二个多项式的长度");
int m=input.nextInt();
System.out.println("请输入第二个多项式");
polynolist blist=new polynolist();
for(int i=0;i<m;i++)
{
coeff=input.nextInt();
expon=input.nextInt();
blist.AddPoly(coeff, expon);
}
//两个多项式的最高次项
System.out.println("alist的最高次项:");
alist.PolyBigExpon();
System.out.println("blist的最高次项:");
blist.PolyBigExpon();
//两个多项式的加法:
System.out.println("两个多项式的加法:");
alist.PolyAdd(blist);
//两个多项式的减法
System.out.println("两个多项式的减法:");
alist.PolyMin(blist);
//两个多项式的乘积
System.out.println("两个多项式的乘积为:");
alist.PolyMulti(blist);
//两个多项式的求导
System.out.println("两个多项式的求导:");
alist.PolyDiff();
blist.PolyDiff();
}
}
运行结果:
请输入第一个多项式的长度
4
请输入第一个多项式
2 0
3 1
4 2
5 3
请输入第二个多项式的长度
5
请输入第二个多项式
6 0
5 1
4 2
3 3
2 4
alist的最高次项:
3
blist的最高次项:
4
两个多项式的加法:
8+8x+8x^2+8x^3+2x^4
两个多项式的减法:
-4-2x+2x^3-2x^4
两个多项式的乘积为:
12+28x+47x^2+68x^3+54x^4+38x^5+23x^6+10x^7
两个多项式的求导:
3+8x+15x^2
5+8x+9x^2+8x^3
4
请输入第一个多项式
2 0
3 1
4 2
5 3
请输入第二个多项式的长度
5
请输入第二个多项式
6 0
5 1
4 2
3 3
2 4
alist的最高次项:
3
blist的最高次项:
4
两个多项式的加法:
8+8x+8x^2+8x^3+2x^4
两个多项式的减法:
-4-2x+2x^3-2x^4
两个多项式的乘积为:
12+28x+47x^2+68x^3+54x^4+38x^5+23x^6+10x^7
两个多项式的求导:
3+8x+15x^2
5+8x+9x^2+8x^3