基于链接列表从优先级队列中删除项目

时间:2012-04-12 05:13:35

标签: java linked-list priority-queue

我正在尝试通过链接列表创建Java中的PriorityQueue类。在队列中,具有不同优先级的对象将以无特定顺序添加到列表的末尾,因此添加元素将是O(1)并且移除具有最高优先级的元素将是O(n)。但是,我在编写remove方法时遇到了困难。我在Linked List类中创建了一个“removeHighestPriorityNode”方法,但是我被卡住了。这就是我到目前为止所做的:

public void removeHighestPriorityNode()
{
    if(head == null)                                
    {
        throw new NoSuchElementException();
    }
    else if (head.next != null)
    {
        Node<E> previous = head;
        Node<E> current = head.next;
        Node<E> highestPriority = head;

        while(current != null)
        {
            if (current.priority > previous.priority)
            {
                highestPriority = current;
            }

            previous = current;
            current = current.next;
        }
    }
    else
    {
        clear(); //Clears the list
    }
}

查找具有最高优先级的节点没有问题,但是找到一种方法将指针(下一个)从具有最高优先级的节点之前的节点切换到之后的节点是我遇到的问题。此外,这是我第一次在本网站上发帖,所以如果我以任何方式模糊,请告诉我。任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:0)

要么考虑使用双向链表,要么引用下一个和上一个节点,要么使用Node<E> nodeReferencingHighestPriority;并在循环中跟踪它:

    while(current != null)
    {
        if (current.priority > previous.priority)
        {
            nodeReferencingHighestPriority = previous;
            highestPriority = current;
        }

        previous = current;
        current = current.next;
    }
相关问题