多项式加法使用链表



这是一个使用链表进行多项式加法的代码。

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都有第一个和最后一个吗?

谁能给我解释一下吗

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)。看第二行。a.first.next也是一个Node。第7行说每个Node都有一个指向下一个Node的指针。

每个LinkedPolynomial确实有first和last。看看LinkedPolynomial构造函数。要创建一个LinkedPolynomial,它已经有了first和last,如果需要的话,构造函数可以更改last。

  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之后,它将访问第一个节点旁边的节点。

最新更新