PriorityList - 入队方法错误

时间:2014-12-22 00:27:56

标签: java linked-list priority-queue

我想写一个PriorityList队列,其中所有Elements都是订单的基础。在我的情况下,我想订购Type ElementType的元素(可以是任何东西,用于测试我使用整数并根据它们的值对它们进行排序,从最高值开始并以最低值结束)

但是,我在以下方法中找到错误时感到很茫然。代码运行但不按预期工作。

让代码添加3 3 4或3 4 5很好地工作。我得到4 3 3和5 4 3,完全应该如此。 但是,如果我给队列提供以下值:5 3 3 4 5 4,我得到:5 3 3; 我希望5 5 4 4 3 3; 我认为这是可以理解的,有什么不对,但是我并不完全理解指针以解决这个问题。

如果有人可以查看以下代码行并尝试弄清楚,出了什么问题以及如何修复它,我会非常高兴。如有必要,我可以在第二天早上提供更多信息。

public void enqueue(ElementType element) {
        ListNode elem = new ListNode ((ElementType)element);        
        if(head == null) {          
            head = elem;
            head.data = element;
            head.next = null;
            head.prev = null;
            tail = head;

        }
        else {  
            ListNode n = null;
            n = head;

            if(element.compareTo(head.data) > 0) {

                elem.prev = null;
                head.prev = elem; 
                elem.next = head;

                head.next = n.next; 
                head = elem;    return; 
            }
            int k = 0;  
            while(element.compareTo(n.data) <= 0 ) {
                k++;
                if(n.next !=null) {

                n = n.next; 

                 }

                else  {

                    elem.prev = n; 
                    n.next = elem;
                    tail = elem; 
                    elem.next = null;

                    return; }
            }   

            elem.prev = n.prev; 
            n.prev = elem; 
            elem.next = n; 

            } }

3 个答案:

答案 0 :(得分:1)

我相信PriorityQueue可以取代你的大部分代码。查看the JavaDocs

  

优先级队列的元素按其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。

因此,如果ElementType实施Comparable<ElementType>,或者如果您提供Comparator<ElementType>,则应该全部设置。

答案 1 :(得分:0)

正如wasgren指出的那样,这个代码在PriorityQueue中是多余的。也许您正在这样做以了解链接列表,但是......

此代码无法正常工作,因为您在上一个案例中没有正确链接elem(在第二个最后一个大括号之前的代码块)。

尝试将其添加到该块的末尾,就在那些紧密的大括号之前:

elem.prev.next = elem;

答案 2 :(得分:-1)

为什么不使用java优先级队列来完成大部分工作,并且非常优化你所拥有的