在Java中合并两个队列

时间:2015-05-31 16:42:48

标签: java merge queue

我一直在研究这段代码以正确合并和打印这两个队列,但无济于事。如果有人可以帮我指出正确的方向或让我知道我做错了什么,那将是非常感激的。

节点类

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();

1 个答案:

答案 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