对此链接列表进行排序?

时间:2014-09-22 20:57:56

标签: java sorting linked-list

我正在尝试对多项式链表进行排序,其中度包含在节点中。例如,多项式5x ^ 2 + 5x + 5的poly.term.degrees将是2,1,0。不幸的是我有一个方法可以添加多项式,但以相反的方式返回它们(5 + 5x + 5x ^ 2),这不会让我对这个我正在尝试完成的任务有所贡献,所以我需要为它做一个排序方法它。我尝试了几次,但我似乎无法掌握它 - 通过此方法传递链表的头只返回我通过的头并删除其余的节点。有人可以帮帮我吗?

或者我可以在添加多项式而不是addToFront时使用addToRear方法,但我似乎无法使用...我在下面发布了正在进行的排序方法和正在进行的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;
    }
}

2 个答案:

答案 0 :(得分:0)

我会试着指出你的一些错误。

  1. 您尝试进行的排序(冒泡排序的某些修改)应该有两个嵌套循环。外循环将是while (changes),内循环迭代元素。当你交换两个元素时,请changes = true

  2. 交换元素时,不要尝试交换节点,交换它们的值(term)。它很简单:

    Term temp = curr.term; curr.term = curr.next.term; curr.next.term = temp;

  3. 在addToBack中你有两个错误,首先,你似乎期望在分配之后头部会在方法之外发生变化(head = n;),但事实并非如此,你只更改本地副本。 第二,在else分支中,而不是head = n;,应该有temp.next = n;

  4. 您可以考虑构建列表,而不是编写单独的方法addToBack,而不是:

     head = elementSource.next();
     tail = head;
     while (elementSource.hasNext()) {
       tail.next = elementSource.next();
       tail = tail.next;
     }
    

    请注意,元素会添加到列表的尾部。 在这里,我使用elementSource代替了您实际的元素来源,仅仅是为了说明原因。

答案 1 :(得分:0)

 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