我正在尝试对节点中包含次数的多项式链表进行排序。例如,多项式5x^2+5x+5的poly.term.degrees为2,1,0。不幸的是,我有一个方法添加多项式,但以相反的方式返回它们(5+5x+5x^2),这不会让我在我试图完成的任务中获得学分,所以我需要为它制定一个排序方法。我试了几次,但似乎都没能掌握窍门——通过这个方法传递链表的头只返回我传递的头,并删除其余的节点。有人能帮我吗?
或者,我可以在添加多项式时使用addToRear方法,而不是addToFront,但我似乎无法使用它。。。我在下面发布了我正在进行的排序方法和正在进行的addToRear,任何输入都将不胜感激!
private void sort(Node head) // CURRENTLY BROKEN!!!!!!!!!!
{
Node temp;
Node curr = head;
while(curr.next != null)
{
if(curr.term.degree < curr.next.term.degree) //either degree is smaller or greater
{//swap
temp = curr; //save first element
curr = curr.next; //set first element to second
temp.next = curr.next; //set next of first to third
curr.next = temp; //set second element to the first that we saved before
}
curr = curr.next; //move to next element
}
}
private void addToBack(float coeff, int deg, Node head)
{
if(head==null)
{
// System.out.println("List empty, creating new node");
Node n = new Node(coeff,deg,head);
head = n;
System.out.println(head.term.coeff);
}
else
{
Node n = new Node(coeff,deg,head);
Node temp = head;
while(temp.next!=null)
{
System.out.println("a");
temp.next=temp;
}
head = n;
}
}
我将尝试向您指出一些错误。
-
您尝试进行的排序(对冒泡排序的一些修改)应该有两个嵌套循环。外循环将是
while (changes)
,内循环迭代元素。交换两个元素时,将其设为changes = true
。 -
当交换元素不尝试交换节点时,交换它们的值(
term
)。就这么简单:Term temp = curr.term; curr.term = curr.next.term; curr.next.term = temp;
-
在addToBack中,您有两个错误,首先,您似乎希望在分配它(
head = n;
)后,head会在方法外更改,但这不是真的,您只更改了本地副本。其次,在else分支中,应该有temp.next=n,而不是head = n;
;
与其编写单独的方法addToBack
,您可以考虑在适当的位置构建您的列表,例如:
head = elementSource.next();
tail = head;
while (elementSource.hasNext()) {
tail.next = elementSource.next();
tail = tail.next;
}
请注意,元素被添加到列表的尾部。在这里,我使用elementSource
来代替您的实际元素源,只是为了说明原因。
if(curr.term.degree < curr.next.term.degree) //either degree is smaller or greater
{//swap problem should be here while swapping
node temp;
temp=curr;
curr=curr.next;//curr changes here
temp.next=curr; //maintaining the link
}
curr = curr.next; //move to next element