每当我运行它时,它会在我测试函数时返回一堆:null,null,null。
//enqueue()
//adds newItem to the back of this Queue
public void insertItemLast(Object newItem){//make sure that it is not empty so we can do the cool stuff in here
if(newItem == null)
return;//user inputs nothing
else {
Node P = new Node(newItem);
P.next = null;
if(head == null){
head = P;
tail = P;
//tail.next = null;
}else{
tail.next = new Node(newItem);
tail = new Node(newItem);
//tail.next = null;
}
}
numItems++;
}//end enqueque
答案 0 :(得分:1)
您可以创建两个不同的链接,而不只是一个。
你的其他人应该是:
} else {
tail.next = new Node(newItem);
tail = tail.next;
}
实际上,你可以让它变得更简单。在所有情况下,只需使用P作为列表的新链接:
public void insertItemLast(Object newItem){
if(newItem == null)
return;//user inputs nothing
else {
Node P = new Node(newItem);
P.next = null;
if(head == null) {
head = P;
tail = P;
} else {
tail.next = P;
tail = P;
}
}
numItems++;
}//end enqueque
答案 1 :(得分:0)
您正确地将新Node
分配给tail.next
,但您没有更新tail
;您改为将另一个新的Node
分配给tail
,从而有效地打破了列表的尾部。
将旧tail
推进到新tail
- 新插入的Node
- 替换
tail = new Node(newItem);
与
tail = tail.next;