2014-03-02 169 views
0

對於我的隊列類,我很困難地想出一個enqueue方法。我需要它,以便首先將toString()指向A並首先指向A.尾部指向C將插入隊列將發生。我只需要一個正確的方向,謝謝!使用java實現鏈接隊列

public class SinglyLinkedQueue { 
    public static void main(String[] args) { 
     SinglyLinkedQueue myQueue = new SinglyLinkedQueue(); 
     myQueue.enqueue("A"); 
     myQueue.enqueue("B"); 
     myQueue.enqueue("C"); 
     System.out.println(myQueue.toString()); 
    } 
    private SinglyLinkedNode head = new SinglyLinkedNode("",null); 
    private SinglyLinkedNode tail = new SinglyLinkedNode("",null); 

    public boolean isEmpty() { 
     return head == null && tail == null; 
    } 
    public String toString() { 
     if(isEmpty() == true) { 
      return ""; 
     } else { 
      return toString(head); 
     } 
    } 
    public String toString(SinglyLinkedNode n1) { 
     if(n1 == null) { 
      return ""; 
     } 
     String comma = "<"; 
     if(head != n1) { 
      comma = ","; 
     } if(n1.getNext() == null) { 
      comma = ">"; 
     } 
     return comma+n1.getValue()+toString(n1.getNext()); 
    } 
    public void enqueue(String str) { 

    } 
} 
+0

您的預期/實際結果是? –

+0

我希望toString()方法返回。 – Exception

+0

JDK中的鏈接隊列有什麼問題? –

回答

0

假設這是一個FIFO隊列,您SinglyLinkedNode構造是節點的值和下一個節點:你首先需要設置當前尾部指向新的尾部,再其次設置尾部爲指向新尾:

public void enqueue(String str) { 
     // Empty queue 
     if (isEmpty()) { 
      head = new SinglyLinkedNode(str, null); 
      tail = head; 
     } 
     // Non-empty queue 
     else { 
      SinglyLinkedNode newTail = new SinglyLinkedNode(str, null); 
      tail.next = newTail; 
      tail = newTail; 
     } 
    } 

注意,它不會使一個很有意義的頭部和尾部設置爲一個空字符串不同的節點(它們是SinglyLinkedNode不同實例)。相反,你在SinglyLinkedQueue領域的聲明應該是:

private SinglyLinkedNode head, tail; 

頭部和尾部都只是指向一個特定節點(或多個)。你只需要在修改隊列時保持它們的更新(當然,確保你的節點都保持鏈接)。

最後迭代toString()Ted Bigham指出:

@Override 
    public String toString() { 
     if (isEmpty()) { 
      return ""; 
     } 

     String result = "<"; 
     SinglyLinkedNode current = head; 
     while (current != null) { 
      result += current.value; 
      current = current.next; 

      if (current != null) { 
       result += ","; 
      } 
     } 
     return result + ">"; 
    } 

雖然我認爲這將是更好的爲空隊列返回<>,而不是因爲它是更豐富和簡化了代碼。

還要注意,@Override註釋應該用於覆蓋默認的toString()方法。爲什麼它有用表示here