这是使用链表进行多项式加法的代码。
public class LinkedPolynomial{
private Node first=new Node(0,0);
private Node last=first;
private static class Node{
int coef;
int exp;
Node next;
Node(int coef,int exp){
this.coef=coef;
this.exp=exp;
}
}
private LinkedPolynomial(){}
public LinkedPolynomial(int coef,int exp){
last.next=new Node(coef,exp);
last=last.next;
}
//return c=a+b
public LinkedPolynomial plus(LinkedPolynomial b){
LinkedPolynomial a = this;
LinkedPolynomial c = new LinkedPolynomial();
Node x=a.first.next;
Node y=b.first.next;
while(x!=null || y!=null){
Node t=null;
if(x==null){
t=new Node(y.coef,y.exp);
y=y.next;
}
else if(y==null){
t=new Node(x.coef,x.exp);
x=x.next;
}
else if(x.exp>y.exp){
t=new Node(x.coef,x.exp);
x=x.next;
}
else if {
t=new Node(y.coef,y.exp);
y=y.next;
}
else{
int coef=x.coef+y.coef;
int exp=x.exp;
x=x.next;
y=y.next;
if(coef==0)
continue;
t=new Node(coef,exp);
}
c.last.next=t;
c.last=c.last.next;
}
return c;
}
public static void main (String args[]){
LinkedPolynomial zero=new LinkedPolynomial(0,0);
LinkedPolynomial p1=new LinkedPolynomial(4,3);
}
}
在方法plus()
中,有人可以向我解释使用
LinkedPolynomial a = this;
LinkedPolynomial c = new LinkedPolynomial();
Node x=a.first.next;
Node y=b.first.next;
什么是a.first.next;
什么是LinkedPolynomial
。它是节点吗?每个LinkedPolynomial
都有第一个和最后一个吗?
有人可以向我解释这些。
答案 0 :(得分:1)
LinkedPolynomial a = this;
LinkedPolynomial c = new LinkedPolynomial();
a和c引用LinkedPolynomial
个对象,而不是LinkedLists
。它们封装了列表节点。
Node x=a.first.next;
Node y=b.first.next;
a.first.next
是一个节点!
LinkedPolynomial
类包含指向节点的字段。这称为封装,是一种很好的编程习惯,因此外部代码不能直接篡改节点,从而破坏LinkedPolynomials
。
由于a是LinkedPolynomial
,a.first
是一个节点(确切地说是coef = 0
和exp = 0
)。看第2行.a.first.next也是一个节点。第7行表示每个节点都有一个指向其下一个节点的指针。
每个LinkedPolynomial
确实有第一个和最后一个。查看LinkedPolynomial
构造函数。要创建LinkedPolynomial
,它已经有第一个和最后一个,构造函数可以根据需要更改最后一个。
答案 1 :(得分:0)
LinkedPolynomial a = this;
意味着它指的是当前的对象。例如,如果你有
LinkedPolynomial zero=new LinkedPolynomial(0,0);
LinkedPolynomial p1=new LinkedPolynomial(4,3);
zero.plus(P1)。 this
将引用零对象。
2. LinkedPolynomial c = new LinkedPolynomial();
这是为了存储a + b的值而创建的。
3.根据代码,每个LinkedPolynomial包含两个节点first
和last
。因此,当您执行a.first
时,它正在访问第一个节点,之后执行next
时,它将访问第一个节点旁边的节点。