Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Data Structures_Linked List_Polynomial Math - Fatal编程技术网

Java 多项式链表的度排序

Java 多项式链表的度排序,java,sorting,data-structures,linked-list,polynomial-math,Java,Sorting,Data Structures,Linked List,Polynomial Math,我试图按降序对链表中存储的多项式进行排序,但该算法似乎错过了链表的最后一个节点,因此多项式的最后一项始终未排序。有人知道如何解决这个问题吗 Node prev = mult.poly; //mult.poly is a pointer to the first node of the polynomial linked list Node curr = mult.poly.next; do{ if (curr.term.degree < prev.term.de

我试图按降序对链表中存储的多项式进行排序,但该算法似乎错过了链表的最后一个节点,因此多项式的最后一项始终未排序。有人知道如何解决这个问题吗

Node prev = mult.poly; //mult.poly is a pointer to the first node of the polynomial linked list 
Node curr = mult.poly.next;

    do{
        if (curr.term.degree < prev.term.degree){ //compare degrees
            int temp2 = curr.term.degree;             
            curr.term.degree = prev.term.degree;       
            prev.term.degree = temp2;                  

            float temp3 = curr.term.coeff;
            curr.term.coeff = prev.term.coeff;
            prev.term.coeff = temp3;

            prev = mult.poly;
            curr = mult.poly.next;
        } 

        prev = prev.next;
        curr = curr.next;
    } while(curr!=null);

    return mult;
}
Node prev=mult.poly//mult.poly是指向多项式链表第一个节点的指针
节点curr=mult.poly.next;
做{
如果(当前学期学位<上学期学位){//比较学位
int temp2=当前学期学位;
当前学期学位=上学期学位;
prev.term.degree=temp2;
浮动温度3=当前期限系数;
curr.term.coeff=上一个term.coeff;
prev.term.coeff=temp3;
prev=多重多边形;
curr=mult.poly.next;
} 
prev=prev.next;
curr=curr.next;
}while(curr!=null);
返回mult;
}

您尝试在链接列表上实现一个。冒泡排序在循环中运行一个循环,而您只实现了内部循环-这就是为什么它不起作用

例如:

for (int i = 0; i < list.size(); i++) {
    Node prev = mult.poly; //mult.poly is a pointer to the first node of the polynomial linked list 
    Node curr = mult.poly.next;

    do {
        if (curr.term.degree < prev.term.degree){ //compare degrees
            int temp2 = curr.term.degree;
            curr.term.degree = prev.term.degree;
            prev.term.degree = temp2;

            float temp3 = curr.term.coeff;
            curr.term.coeff = prev.term.coeff;
            prev.term.coeff = temp3;

            prev = mult.poly;
            curr = mult.poly.next;
        }

        prev = prev.next;
        curr = curr.next;
    } while(curr!=null);
}
return mult;  
for(int i=0;i

提示:要调试按还原顺序排序的列表上运行的冒泡排序,您可以更轻松地捕获冒泡排序中的错误。

这是编程练习吗?否则,为什么不使用标准的
列表
Collection.sort()
?这是一个更大的赋值的一部分,所以我必须这样做。你为什么要对链表进行冒泡排序?在这种情况下,合并排序更自然,也更快。那么,你是建议我修复冒泡排序并切换节点,还是只执行一个或另一个?@StevenT只需运行
do…而
在另一个for循环中运行,该循环的运行次数等于列表的长度。我添加:
for(prev=mult.poly;prev.next!=null;prev=prev.next)
但是我得到了一个空指针,除了你在
curr上得到NPE
prev
遵循curr。在
curr
上运行相同的循环逻辑,你应该很好。使用
for(curr=mult.poly.next;curr.next!=null;curr=curr.next)
它表示
curr=curr。next
只能在该位置为空