2012-04-12 17 views
0

リンクリストを介して実装されたJavaでPriorityQueueクラスを作成しようとしています。キュー内で優先順位の異なるオブジェクトがリストの末尾に特別な順序で追加されるため、要素の追加はO(1)、優先順位の最も高い要素の削除はO(n)となります。しかし、私はremoveメソッドを書くのが難しいです。リンクリストクラスで「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

どちらかあなたが次と前の両方のノードへの参照を持っているので、二重にリンクされたリストを使用して検討し、またはNode<E> nodeReferencingHighestPriority;を使用して、ループ内でそれを追跡する:私はしませんでしたどのように

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

     previous = current; 
     current = current.next; 
    } 
+0

わかりませんそれ以前に感謝してください! – user1328155

関連する問題