2014-03-02 55 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