title: Why isn't my dequeue method working for my treeMap PriceQueue?
body: <p>I have a PriceQueue class and I have gotten all my tests to pass except 2. Thenones that fail are:</p>
  
  <pre><code>public void test05DeleteBackInOrder() {
      PriceQueue pq = new PriceQueue();
      pq.enqueue(p101);
      pq.enqueue(p202);
      pq.enqueue(p303);
      pq.enqueue(p404);
      pq.enqueue(p505);
      assertTrue(pq.delete(p303));
      assertTrue(pq.delete(p404));
      assertTrue(pq.delete(p505));
      assertEquals(p101, pq.dequeue());
      assertEquals(p202, pq.dequeue());
  
      pq = new PriceQueue();
      pq.enqueue(p101);
      pq.enqueue(p202);
      pq.enqueue(p303);
      pq.enqueue(p404);
      pq.enqueue(p505);
      assertTrue(pq.delete(p303));
      assertTrue(pq.delete(p404));
      assertTrue(pq.delete(p505));
      pq.enqueue(p303);
      pq.enqueue(p404);
      assertEquals(p101, pq.dequeue());
      assertEquals(p202, pq.dequeue());
      assertEquals(p303, pq.dequeue()); //This is where it is failing
      assertEquals(p404, pq.dequeue());
  }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>public void test05DeleteMiddleInOrder() {
      PriceQueue pq = new PriceQueue();
      pq.enqueue(p101);
      pq.enqueue(p202);
      pq.enqueue(p303);
      pq.enqueue(p404);
      pq.enqueue(p505);
      assertTrue(pq.delete(p202));
      assertTrue(pq.delete(p303));
      assertTrue(pq.delete(p404));
      assertEquals(p101, pq.dequeue());
      assertEquals(p505, pq.dequeue()); // This is where it fails
  
      pq = new PriceQueue();
      pq.enqueue(p101);
      pq.enqueue(p202);
      pq.enqueue(p303);
      pq.enqueue(p404);
      pq.enqueue(p505);
      assertTrue(pq.delete(p202));
      assertTrue(pq.delete(p303));
      assertTrue(pq.delete(p404));
      pq.enqueue(p202);
      pq.enqueue(p303);
      assertEquals(p101, pq.dequeue());
      assertEquals(p505, pq.dequeue());
      assertEquals(p202, pq.dequeue());
      assertEquals(p303, pq.dequeue());
  }
  </code></pre>
  
  <p>These are the ones that are failing and I don't understand where it is that I am missing deleting the prie so that it dequeues correctly.
  Here is my code here:</p>
  
  <pre><code>public Price dequeue() {
      if (isEmpty()) throw new NoSuchElementException("Queue underflow");
      Price price = first.price;
      first = first.next;
      n--;
      if (isEmpty()) last = null; 
      hold.remove(hold.lastKey());
      // to avoid loitering
      return price;
  }
  
  
  /**
   * Deletes a Price from the queue if it was present.
   * @param price the Price to be deleted.
   * @return {@code true} if the Price was deleted and {@code false} otherwise
   */
  public boolean delete(Price price) {
      // TODO implelment me!!!
      // Make sure the running time is no worse than logrithmic!!!
      // You will want to use Java's TreeMap class to map Prices to the node
      // that precedes the Price in the queue
      //last node==special case
      //^^ requires resetting prev. to null, and val to next
      if (hold.containsKey(price)) {
          Node temp = hold.get(price);
          //if (price.equals(f))
          if (price.equals(first.price) &amp;&amp; n &gt;= 3) {
              first = first.next;
              n--;
              hold.remove(price);
              return true;
          }
          if (price.equals(first.price)) {
              first = first.next;
              hold.remove(price);
              n--;
              return true;
          }
          if (price.equals(last.price)) {
              temp.next = null;
              last = temp;
              n--;
              hold.remove(price);
              return true;
          }
          if (temp.next != (null)) {
              temp.next = temp.next.next;
              n--;
              hold.remove(price);
              return true;
          }
  
          return true;
      }
      else return false;
  
  }
  </code></pre>
  
  <p>Any help is appreciated even if it is a tip or hint. If anything else is needed please let me know and I will supply, these are just the parts of my code.
  Thank you!</p>