【问题标题】:Merge two Queues in Java在 Java 中合并两个队列
【发布时间】:2015-05-31 16:42:47
【问题描述】:

我一直在编写此代码以正确合并和打印这两个队列,但无济于事。如果有人可以帮助我指出正确的方向或让我知道我做错了什么,将不胜感激。

节点类

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;
    }
}

链表类

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;
}

这是我在 Main 中放入的内容。现在打印两个队列,但打印出节点位置,而不是当我调用其他队列时打印出的内容。

    LinkedListQueue q3 = new LinkedListQueue();
q3 = LinkedListQueue.merge(q1,q2);
q3.printList();

【问题讨论】:

  • 您需要更具体地了解您的问题
  • 您面临什么问题?
  • 好吧,现在的问题是没有合并方法。你至少尝试过写它吗?
  • 在尝试合并这两个队列时,merge 方法出现,因为找不到符号。

标签: java merge queue


【解决方案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); 部分。该语法表示调用类LinkedListQueue 中定义的静态方法merge。但是,在您的代码中查找 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

【讨论】:

  • 我刚刚修改了我发布的内容并添加了静态方法
  • @user4935102 您的调整似乎没有正确使用泛型类型 (&lt;E&gt;s)。尝试调整它。 *得跑了,对不起。
猜你喜欢
  • 2022-11-15
  • 2010-10-26
  • 2020-06-18
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
相关资源
最近更新 更多