Print方法For Java LinkedQueue未获取front值



我用Java实现了一个LinkedQueue。这是我自己的实现,它没有扩展任何类或实现任何接口(项目的需求(但是,我的打印方法不会返回队列中的第一个项目。有什么想法吗?

ListNode类

public class ListNode<AnyType> {
public ListNode( AnyType theElement ) {
this( theElement, null );
}
public ListNode( AnyType theElement, ListNode<AnyType> n) {
element = theElement; next = n;
}
public AnyType element;
public ListNode next;
}

LinkedQueue类

public class LinkedQueue <AnyType> {
private ListNode<AnyType> front;
private ListNode<AnyType> back;

LinkedQueue() {
front = back = null;
}
public void enqueue ( AnyType x ) {
if ( isEmpty()) 
back = front = new ListNode<AnyType>(x);
else back = back.next = new ListNode<AnyType>(x);
}
public LinkedQueueIterator<AnyType> first() {
return new LinkedQueueIterator<AnyType>(front.next);
}
public static <AnyType> void printList(LinkedQueue theList) {
if (theList.isEmpty()) {
System.out.println("Empty List");
} else {
LinkedQueueIterator<AnyType> itr = theList.first();
for( ; itr.isValid(); itr.advance()) {
System.out.print( itr.retrieve() + " ");
}
}
}

LinkedQueueIterator类

public class LinkedQueueIterator<AnyType> {
ListNode<AnyType> current;
LinkedQueueIterator(ListNode<AnyType> theNode) {
current = theNode;
}
public boolean isValid(){
return current != null;
}
public AnyType retrieve(){
return isValid() ? current.element : null;
}
public void advance() {
if( isValid())
current = current.next;
}

}

我真的看不出它有什么问题,但如果我做LQ.enquee("A"(、LQ.enQuee("B"(、RQ.enqueue("C"(并调用printList,我得到的只是B C

在看了你的编码一段时间后,仅仅因为你的一个小错误,你的first()方法返回了front元素之后的元素,在这段代码中:

public LinkedQueueIterator<AnyType> first() {
return new LinkedQueueIterator<AnyType>(front.next);
}

因为您想要获得队列的第一个元素,所以应该这样修改它:

public LinkedQueueIterator<AnyType> first() {
return new LinkedQueueIterator<AnyType>(front);
}

现在你的程序应该可以正常运行了。

相关内容

  • 没有找到相关文章

最新更新