首页 > 解决方案 > 删除队列的中间编号

问题描述

我需要创建一个方法来删除链接队列的中间编号。[1,2,3,4,5] 变成 [1,2,4,5] 如果队列是偶数,则向下舍入并从那里删除。所以 [1,2,3,4] 变成了 [1,3,4]。

我不确定如何删除中间的数字,然后再添加我删除的其他数字。

这是我目前拥有的。

...

public class LinkedQueue {
Node head;
Node front;
Node rear;
int count;
int elements;




public void enqueue(int numEnqueue) {
    Node node = rear;
    rear=new Node();
    rear.numEnqueue=numEnqueue;
    rear.next=null;
    if (front==null) 
        front = rear;
        else    
            node.next = rear;
    count++;
    elements=count;
    }

//
public void dequeue() {
    for(int i=0;i<6;i++) {
    int numEnqueue = front.numEnqueue;
    front = front.next;
    count--;
    System.out.print("\nDequeueing: "+numEnqueue);
    }

}

public void show() {
    Node node = front;
    System.out.print("\n\nQueued linked elements: ");
    while(node!=null) {
        System.out.print(node.numEnqueue+" ");
        node=node.next;
        
    }
    
    
}


public void removeMiddle() {    
    int half = 0;
    half=elements/2;
    for (int i=0;i<half;i++) {
        int numEnqueue = front.numEnqueue;
        front = front.next;
    }

}
  
}

... 驱动程序代码

...

public class Driver {

public static void main(String[] args) {

    LinkedQueue link=new LinkedQueue();
    link.enqueue(1);
    link.enqueue(7);
    link.enqueue(3);
    link.enqueue(4);
    link.enqueue(9);
    link.enqueue(2);
    link.show();
    link.dequeue();
    
    
    link.enqueue(1);
    link.enqueue(7);
    link.enqueue(3);
    link.enqueue(4);
    link.enqueue(9);
    link.enqueue(2);
    link.removeMiddle();
    link.show();

}



}

...节点代码

public class Node {
int numEnqueue;
Node next;

}

标签: javaalgorithmdata-structures

解决方案


由于这是家庭作业,我将提供伪代码/建议:

  • 给定一个长度队列n,您需要删除元素(n - 1) / 2int算术会为您截断除法的小数部分)。
  • 在一个迭代次数的循环中(n - 1) / 2,从根节点开始,每次迭代都前进到下一个节点
  • 删除循环结束的节点

实际的解决方案比这稍微复杂一些,您可能会发现删除下一个节点更容易,因为每个节点都没有对其前任的引用。在这种情况下,迭代到根节点将被视为循环的一次迭代。


推荐阅读