2014-06-24 52 views
0

这是使用链接列表添加多项式的代码。使用链接列表添加多项式

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

是否有意让LinkedPlynomial和LinkedPolynomial?我不清楚你是否想要两个不同的课程,或者这是一个糟糕的重新打字工作。 –

+0

这几乎肯定是一个错字。 – Ben

+0

@sam_rox,看看LinkedPolynomial类的定义,它非常简单。它意味着包含一个多项式,如“x^2 + 2x + 3”,每个节点包含一个不同的项。 – Ben

回答

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 = 0exp = 0)。看第2行。a.first.next也是一个节点。第7行表示每个节点都有一个指向其下一个节点的指针。

每个LinkedPolynomial确实有第一个和最后一个。看看构造函数LinkedPolynomial。为了制作一个LinkedPolynomial,它已经有了第一个和最后一个,如果需要,构造函数可以更改最后一个。

+0

:如果多项式为“LinkedPolynomial p1 = new LinkedPolynomial(4,3); LinkedPolynomial p2 = new LinkedPolynomial(3,2); LinkedPolynomial p3 = new LinkedPolynomial(1,0); LinkedPolynomial p4 = new LinkedPolynomial(2,1); LinkedPolynomial p = p1.plus(p2).plus(p3).plus(p4); // 4x^3 + 3x^2 + 1 LinkedPolynomial q1 = new LinkedPolynomial(3,2); LinkedPolynomial q2 = new LinkedPolynomial(5,0); LinkedPolynomial q = q1.plus(q2); LinkedPolynomial q = q1.plus(q2); 'p1.plus(p2)''t后面有系数4和指数3 –

+0

然后用'p1.plus(p2).plus(p3)'x指向t和y指向p3右边?被执行的是'if(x.exp> y.exp)'。然后t又有系数4和指数3,我要去的方式有什么问题 –

0
  1. 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包含两个节点firstlast。因此,当您执行a.first时,它正在访问第一个节点,并在此后执行next时,它将访问第一个节点旁边的节点。