我很难为队列类提出一个enqueue方法。我需要它,以便头部将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) {
}
}
答案 0 :(得分: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;
}
}
注意将头部和尾部设置为具有空字符串的单独节点没有多大意义(它们是{em>不同的实例{{1 }})。相反,SinglyLinkedNode
中的字段声明应为:
SinglyLinkedQueue
头部和尾部只是指向特定节点的指针。您只需在修改队列时保持更新(当然,确保您的节点保持适当的链接)。
最后针对Ted Bigham指出的迭代private SinglyLinkedNode head, tail;
:
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
注释。有用的原因显示为here。