【问题标题】:How to dequeue an element by index in linear node如何通过线性节点中的索引使元素出列
【发布时间】:2023-03-25 01:40:01
【问题描述】:

如果有人可以提供帮助,我很难找到让该方法删除特定索引上的元素的算法

我已经尝试在下面实现一些,但在逻辑上可能是错误的 我还得到了 javadoc,以便您知道算法要求什么

 /**
         * Removes and returns the element that is at place x in the queue.
         * Precondition: x must be less than 5, x must be less than size Note:
         * indexing from 0: 0 == front element, 1 == second element, etc.
         *
         * @param x the passed in index of the element to be removed
         * @return the element removed from the queue
         * @throws EmptyCollectionException if the queue is empty
         * @throws InvalidArgumentException if x > 4, or x > size of collection
         *
         */
        //@Override
    public T dequeue(int x) throws EmptyCollectionException, InvalidArgumentException {
        // exception throw if queue is empty
        if (numNodes == 0) {
            throw new EmptyCollectionException("Empty Collection");
        }
        // exception throw if x > 4 or size
        if (x > 4 || x > size()) {
            throw new InvalidArgumentException("Invalid x");
        }
        T result = null;
        LinearNode<T> temp = front;
        int count;
        while (temp != null) {
            result = temp.getElement();
            if (numNodes == 1) {

                front = null;
                back = null;
                numNodes--;
                return result;
            }
            if (numNodes > 1) {
                if (count == x) {
                    result = result.setNext();
                }
                x++;
                front = temp.getNext();
                front.setPrev(null);
                numNodes--;
                return result;
            }
        }

删除索引x的节点

【问题讨论】:

    标签: java algorithm queue nodes nodequeue


    【解决方案1】:

    假设您的“LinearNode”类的工作方式类似于 LinkedList 并且具有 getPrevious() 和 getNext() 方法:

    public T dequeue(int idx) {
        // Any other bounds checks go here
        LinearNode<T> curNode = front;
        for(int i = 0; i < idx; i++) {
            if(curNode.getNext() != null) {
                curNode = curNode.getNext();
            } else {
                // idx is out of bounds
                throw new InvalidArgumentException("Index is out of bounds");
            }
        }
        LinearNode<T> previousNode = curNode.getPrevious();
        LinearNode<T> nextNode = curNode.getNext();
        if(previousNode != null) {
            previousNode.setNext(nextNode);
        }
        if(nextNode != null) {
            nextNode.setPrevious(previousNode);
        }
        if(curNode.equals(front)) {
            front = nextNode;
        }
        if(curNode.equals(back)) {
            back = previousNode;
        }
        return curNode.getElement();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      相关资源
      最近更新 更多