我一直在研究这段代码以正确合并和打印这两个队列,但无济于事。如果有人可以帮我指出正确的方向或让我知道我做错了什么,那将是非常感激的。
节点类
public class Node<E> {
private E element;
private Node next;
public Node(E element, Node<E> next) {
// Do something here
this.element = element;
this.next = next;
}
public E getElement() {
return element;
}
public void setNextNode(Node<E> next) {
// Do something here
this.next = next;
}
public Node<E> getNextNode() {
// Replace return null with something useful
return next;
}
}
LinkedList类
public class LinkedListQueue<E> implements Queue<E> {
private Node<E> head;
private Node<E> tail;
private int size;
public LinkedListQueue() {
}
public void enqueue(E element) {
Node newNode = new Node(element, null);
if (size == 0) {
head = newNode;
} else {
tail.setNextNode(newNode);
}
tail = newNode;
size++;
}
public E dequeue() {
if (head != null) {
E element = head.getElement();
head = head.getNextNode();
size--;
if (size == 0) {
tail = null;
}
return element;
}
return null;
}
public E first() {
if (head != null) {
return head.getElement();
}
return null;
}
public int getSize() {
return size;
}
public void printList() {
if (head != null) {
Node currentNode = head;
do {
System.out.println(currentNode.toString());
currentNode = currentNode.getNextNode();
} while (currentNode != null);
}
System.out.println();
}
}
队列类
public interface Queue<E> {
public void enqueue(E e);
public E dequeue();
public E first();
public int getSize();
public void printList();
}
主类
public static void main(String[] args) {
LinkedListQueue q1 = new LinkedListQueue();
q1.enqueue(1);
q1.enqueue(2);
q1.enqueue(3);
q1.enqueue(4);
q1.enqueue(5);
q1.printList();
LinkedListQueue q2 = new LinkedListQueue();
q2.enqueue(6);
q2.enqueue(7);
q2.enqueue(8);
q2.enqueue(9);
q2.printList();
}
public static LinkedListQueue merge(LinkedListQueue q1, LinkedListQueue q2){
LinkedListQueue q3 = new LinkedListQueue();
LinkedListQueue merged = LinkedListQueue.merge(q1,q2);
}
}
以下是我在LinkedList类中的内容
public static LinkedListQueue merge(LinkedListQueue q1, LinkedListQueue q2) {
if (q1 == null) {
return (q2);
} else if (q2 == null) {
return (q1);
}
LinkedListQueue merge = new LinkedListQueue();
merge.enqueue(q1);
merge.enqueue(q2);
return merge;
}
以下是我在主要内容中的内容。现在打印两个队列,但打印出节点位置,而不是在我调用其他队列时打印出来的。
LinkedListQueue q3 = new LinkedListQueue();
q3 = LinkedListQueue.merge(q1,q2);
q3.printList();
答案 0 :(得分:1)
您的问题出现在以下代码段中:
public static LinkedListQueue merge(LinkedListQueue q1, LinkedListQueue q2){
LinkedListQueue q3 = new LinkedListQueue();
LinkedListQueue merged = LinkedListQueue.merge(q1,q2); //problematic line
}
特别是部分LinkedListQueue.merge(q1,q2);
。这种语法是在类merge
中调用静态方法LinkedListQueue
定义的。但是,查看代码LinkedListQueue
,我没有看到定义static
merge
方法。
编写代码的方式,它期望类似于:
public class LinkedListQueue<E> implements Queue<E>{
public static LinkedListQueue<E> merge(LinkedListQueue<E> q1, LinkedListQueue<E> q2){
//definition here
}
//more class code
}
请参阅此处查看more about static methods。