我在完全实现入队和出队部分时遇到了问题。这里的结果,我试图让:Java中的离队
DEQUE TESTING
The size of the deque is: 3
The deque contains:
4 9 8
4
8
9
1
11
The size of the deque is: 2
The deque contains:
11 1
,但是这是我得到:
DEQUE TESTING
The size of the deque is: 3
The deque contains:
4 9 8
4
null
null
null
null
The size of the deque is: 0
The deque contains:
所以,它只能打印速度达到某个点。为了纠正这个问题,我已经多次尝试了我的代码(实际上很多),但我无法确定问题出在哪里。我有一种感觉,它需要改变一些微小的东西。
这里是我的代码:
public class Murray_A06Q3 {
public static void main(String[] args) {
LinkedDeque<Integer> deque = new LinkedDeque<Integer>();
System.out.println("DEQUE TESTING");
deque.enqueueBack(3);
deque.enqueueBack(7);
deque.enqueueBack(4);
deque.dequeueFront();
deque.enqueueBack(9);
deque.enqueueBack(8);
deque.dequeueFront();
System.out.println("The size of the deque is: " + deque.size());
System.out.println("The deque contains:\n" + deque.toString());
System.out.println(deque.dequeueFront());
deque.enqueueFront(1);
deque.enqueueFront(11);
deque.enqueueFront(3);
deque.enqueueFront(5);
System.out.println(deque.dequeueBack());
System.out.println(deque.dequeueBack());
System.out.println(deque.last());
deque.dequeueFront();
deque.dequeueFront();
System.out.println(deque.first());
System.out.println("The size of the deque is: " + deque.size());
System.out.println("The deque contains:\n" + deque.toString());
} // End of main method
public static class LinkedDeque<T> implements DequeADT<T> {
private int count;
private LinearDoubleNode<T> firstNode, lastNode;
// constructor
public LinkedDeque(){
count = 0;
firstNode = null;
lastNode = null;
} // end of constructor
// Beginning of enqueueFront
public void enqueueFront(T element) {
LinearDoubleNode newNode = new LinearDoubleNode();
if(isEmpty()){
lastNode = newNode;
count++;
}
else
firstNode.setPrev(newNode);
firstNode = newNode;
count--;
} // end of enqueFront
// Beginning of enqueueBack
public void enqueueBack(T element) {
LinearDoubleNode<T> node = new LinearDoubleNode<T>(element);
if (isEmpty())
firstNode = node;
else
lastNode.setNext(node);
lastNode = node;
count++;
} // end of enqueueBack
// Beginning of dequeueFront
public T dequeueFront() {
T front = null;
if (!isEmpty()) {
front = firstNode.getElement();
firstNode = firstNode.getNext();
count--;
if (firstNode == null) {
lastNode = null;
}
else
firstNode.setPrev(firstNode);
}
return front;
} // end of dequeueFront
// Beginning of dequeueBack
public T dequeueBack() {
T back = null;
if (!isEmpty()) {
back = lastNode.getElement();
lastNode = lastNode.getPrev();
if (lastNode == null) {
firstNode = null;
}
else
lastNode.setNext(null);
}
return back;
} // end of dequeueBack()
public T first() {
return firstNode.getElement();
}
public T last() {
return lastNode.getElement();
}
// Beginning of isEmpty()
public boolean isEmpty() {
if (count == 0) {
return true;
}
else
return false;
} // End of isEmpty()
// Beginning of size()
public int size() {
return count;
}
// Begin of toString() method
public String toString() {
if (isEmpty()) {
return " ";
}
StringBuilder sb = new StringBuilder();
LinearDoubleNode<T> next = firstNode;
while(next != null){
sb.append(" ").append(next.getElement());
next = next.getNext();
}
return sb.toString();
} // End of toString()
} // End of LinkedDeque
} // End of class header
提示:(1)'count - '在'enqueueFront'没有任何意义。 (2)在两个'enqueue'中,你都需要调用'setPrev'和'setNext',因为它是一个双向链表。 – dejvuth