java - 使用链表进行多项式加法

标签 java linked-list polynomials

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

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 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 也是一个 Node。第 7 行表示每个节点都保存一个指向其下一个节点的指针。

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

关于java - 使用链表进行多项式加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24391951/

相关文章:

python - 为什么 Sympy 会切断系数较小的多项式项?

java - 如何检查 Wicket 文本字段中的空值?

Java - 如何使用相对路径在目录中创建文件

Java:我正在使用 File 并创建了一个类 FileHelper 并在网页中使用 JSP 调用它......帮助?

java - 用户创建了链接列表类来将对象存储在具有菜单功能的文本文件中

python - 勒让德多项式导数

java - 如果 BufferedWriter 已经关闭,为什么它会在关闭时抛出异常?

C - 显示期间链表段错误

python - Python 中有链表预定义库吗?

R:多元正交回归,无需显式编写变量名称