我用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);
}
现在你的程序应该可以正常运行了。