[英]Implementing a linked queue with java
我很难为我的队列类提出一个入队方法。 我需要它,以便头部将toString()指向它,并首先指向A。 尾部指向C的位置,将插入队列。 我只需要朝正确的方向前进,谢谢!
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) {
}
}
假设这是一个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;
}
}
请注意 ,将头和尾设置为带有空String的单独节点没有太大意义(它们是SinglyLinkedNode
不同实例)。 相反,您在SinglyLinkedQueue
的字段声明应为:
private SinglyLinkedNode head, tail;
头和尾仅是指向特定节点的指针。 您只需要在修改队列时使它们保持更新(当然,请确保将所有节点保持正确链接)。
最后是Ted Bigham指出的迭代toString()
:
@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()
方法时,也应使用@Override
批注。 为什么这里有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.