Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按次数对多项式链表排序?_Java_Sorting_Linked List - Fatal编程技术网

Java 如何按次数对多项式链表排序?

Java 如何按次数对多项式链表排序?,java,sorting,linked-list,Java,Sorting,Linked List,目前我已经写了一个将两个多项式相加的方法。Poly1和Poly2。该方法的逻辑如下:首先添加Poly1和Poly2中的所有匹配度项,然后添加Poly1中的所有非匹配项,最后添加Poly2中的所有非匹配项。但正因为如此,条款不符合规定 Polynomial answer = new Polynomial(); for (Node firstPoly = poly; firstPoly != null; firstPoly = firstPoly.next){ boolea

目前我已经写了一个将两个多项式相加的方法。Poly1和Poly2。该方法的逻辑如下:首先添加Poly1和Poly2中的所有匹配度项,然后添加Poly1中的所有非匹配项,最后添加Poly2中的所有非匹配项。但正因为如此,条款不符合规定

Polynomial answer = new Polynomial();

    for (Node firstPoly = poly; firstPoly != null; firstPoly = firstPoly.next){
        boolean polyAdded = false;
        for (Node secondPoly = p.poly; secondPoly != null; secondPoly = secondPoly.next){

            if (firstPoly.term.degree == secondPoly.term.degree){

            answer = addToRear(answer, (firstPoly.term.coeff + secondPoly.term.coeff), firstPoly.term.degree, null);
                    if (answer.poly.term.coeff == 0){
                        answer.poly = null;
                    }
                    polyAdded = true;           
            }


        }
        if (polyAdded == false){
        answer = addToRear(answer, firstPoly.term.coeff, firstPoly.term.degree, null);
        if (answer.poly.term.coeff == 0){
            answer.poly = null;
        }
        }

    }

    for (Node secondPoly = p.poly; secondPoly != null; secondPoly = secondPoly.next){
        boolean match = false;
        for (Node answerPoly = answer.poly; answerPoly != null; answerPoly = answerPoly.next){
            if (secondPoly.term.degree == answerPoly.term.degree){
                match = true;
                break;
            }

        }
        if (match == false){
        answer = addToRear(answer, secondPoly.term.coeff, secondPoly.term.degree, null);
        }
    }

    return answer;

    //alt + shift + r
}
如果此代码输出:

8.0x^4+4.0x^5+2.0x^3+-1.0x+12.0

链表表示为:

(系数,度)/(12,0)->(1,1)->(2,3)->(4,5)->(8,4)

现在我想按次数对我的答案进行排序。链表应如下所示:

(系数,度)/(12,0)->(1,1)->(2,3)->(8,4)->(4,5)

编辑:我自己找到了解决方案。以下是我创建的排序方法:

private Polynomial sortByDegree(Polynomial p){
    Node prev = p.poly;
    Node current = p.poly.next;

    while (current != null){
        if (current.term.degree < prev.term.degree){
            int temp = current.term.degree;
            current.term.degree = prev.term.degree;
            prev.term.degree = temp;

            float temp2 = current.term.coeff;
            current.term.coeff = prev.term.coeff;
            prev.term.coeff = temp2;

            prev = p.poly;
            current = p.poly.next;
        }

        prev = prev.next;
        current = current.next;
    }

    return p;
}
私有多项式排序规则(多项式p){
节点prev=p.poly;
节点电流=p.poly.next;
while(当前!=null){
if(当前学期学位<上学期学位){
int temp=当前的术语度;
current.term.degree=prev.term.degree;
上学期学位=温度;
float temp2=current.term.coeff;
current.term.coeff=prev.term.coeff;
prev.term.coeff=temp2;
prev=p.poly;
当前=p.poly.next;
}
prev=prev.next;
当前=当前。下一步;
}
返回p;
}

谢谢大家

可以提出两种方法:

首先。将链表提取到数组列表(堆栈)中,对数组列表排序,重建为链表

第二。使用以下算法:

void sortPoly(Polynomial answer) {
    float lowerMargin = 0;
    Node head = null, tail = null;

    while (answer.poly != null) {
        Node next = detouchMin(lowerMargin, answer);
        lowerMargin = next.term.degree;

        if (tail != null) {
            tail.next = next;
            tail = next;
        else {
            head = next;
            tail = next;
        }
    }

    answer.poly = head;
}


Node detouchMin(float lowerMargin, Polynomial answer) {
    float min = Float.inf;
    Node n = null;
    Node t = answer.poly;
    while (t != null) {
        if ((t.term.degree > lowerMargin) && (t.term.degree < min)) {
            n = t;
            min = n.term.degree;
        }
        t = t.next;
    }

    if (n != null) {
        Node t = answer.poly, prev = null;
        while (t != null) {
            if (t == n) {
                if (prev != null)
                    answer.poly = t.next;
                else
                    prev.next = t.next;
            }
            prev = t;
            t = t.next;
        }
    }

    return n;
}
void sortPoly(多项式答案){
float lowerMargin=0;
节点头=空,尾=空;
while(answer.poly!=null){
Node next=detouchMin(lowerMargin,answer);
lowerMargin=next.term.degree;
if(tail!=null){
tail.next=next;
尾=下一个;
否则{
头=下一个;
尾=下一个;
}
}
答案:poly=头;
}
节点detouchMin(float-lowerMargin,多项式答案){
float min=float.inf;
节点n=null;
节点t=answer.poly;
while(t!=null){
如果((t.term.degree>lowerMargin)和&(t.term.degree

注意:代码未测试

我需要了解更多关于
多项式
节点
类的定义,但我怀疑您使用的是数组或
列表
,您应该使用
排序集
。我已经更新了两个请求的类。我没有修改这些类的自由。链表是我正在使用的。确实。您正在为
多项式
类使用链表结构。我建议使用
排序集
,例如
树集
。正如我所说,我无法这样做。我只需要对多项式“答案”排序在我返回之前,按等级。这是一个作业,因此我有限制…是的,这是一个旧的,普通的冒泡排序xD