2014-06-24 119 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時,它將訪問第一個節點旁邊的節點。