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
只能在该位置为空