Java 队列合并,初学者

标签 java list queue linked-list

我正在尝试编写一个方法,该方法将接受两个队列(预先排序的链接列表)并按升序返回合并后的队列对象。我粘贴了Queue类,合并方法从向下1/2处开始。

我在调用合并时遇到问题,这就是我尝试从我的主方法调用它的方法,任何人都可以帮助使用 new1 和 new2 进行此调用。非常感谢大家!

如果有人发现任何其他不合适的地方,请告诉我。谢谢!

///////////////// //Testing with a call of merge method & 2 Queues///////////////////

public class test {
public static void main (String args[]){


 Queue new1 = new Queue();
 new1.enqueu(1);
 new1.enqueu(3);
 new1.enqueu(5);

 Queue new2 = new Queue();
 new1.enqueu(2);
 new1.enqueu(4);
 new1.enqueu(6);

    merge(new1, new2);

 //How to call merge? Queue.merge(new1, new2)???
/////////////////Queue/Merge method below////////////////////////


public class Queue {
private Node first, last;
public Queue(){
first = null;
last = null;
}

public void enqueu(int n){
 Node newNode = new Node(n);
 if (first == null)
 {
  first = newNode;
  last = newNode;

 }
 else
 {
  last.setNext(newNode);
  last = newNode;
 }
 }



public int dequeue(){
int num = first.getNum();
first = first.getNext();
if(first == null)
last = null;
return num;
}

public Boolean isEmpty() { return first == null; }



////////////////////////Begin Queue merge/////////////////////////////////


Queue merge(Queue q1, Queue q2) {
 Queue result = new Queue();
 boolean q1empty = q1.isEmpty();
 boolean q2empty = q2.isEmpty();
 while (!(q1empty || q2empty)) { 
 if (q1.first.getNum() < q2.first.getNum()) {
 result.enqueu(q1.dequeue());
 q1empty = q1.isEmpty();
 } else {
 result.enqueu(q2.dequeue());
 q2empty = q2.isEmpty();
 }
 }
 if (!q1empty) {
 do {
 result.enqueu(q1.dequeue());
 } while (!q1.isEmpty());
 } else if (!q2empty) {
 do {
 result.enqueu(q2.dequeue());
 } while (!q2.isEmpty());
 }
 return result;
 }}

最佳答案

这里似乎存在错误:

Queue new1 = new Queue();
new1.enqueu(1);
new1.enqueu(3);
new1.enqueu(5);

Queue new2 = new Queue();
new1.enqueu(2);
new1.enqueu(4);
new1.enqueu(6);

您已向 new1 添加了六个元素,向 new2 添加了零个元素。

由于您的 merge 方法是 Queue 类的实例方法,因此您需要在 Queue 的实例上调用它,例如

Queue q = new Queue();
Queue merged = q.merge(new1, new2);

但是,由于合并似乎没有副作用,并且不会改变 Queue 实例的任何状态,因此您可能只想将此方法设为静态,以便它属于 Queue ,而不是队列的一个实例。例如:

static Queue merge(Queue q1, Queue q2) {
     ...
}

//in main()...
Queue merged = Queue.merge(new1, new2);

关于Java 队列合并,初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1760420/

相关文章:

java - 开始使用 JDBC 的先决条件

java - 为什么这个 Java 8 流示例不能编译?

java - 根据Java中的单词长度将常见英语单词数组拆分为单独的列表/数组

python-3.x - 在新的数据帧上自动提取两个Python字符串之间的相等性

python - 安全存储多线程网络抓取数据

java - 使用 EhCache 配置 OpenJPA 1.3.1 : plugin/alias not found

java - OSHI:获取给定路径的 HWDiskStore

python - 如何使用 python 删除循环列表的元素,直到只剩下一个元素?

javascript - 在div中显示队列消息

java - 使用for循环解锁 "hold"的方法?