private E removeElementRight(Node<E> node) { modCount++; size--; E entry = node.removeEntryRight(); if (node.isEmpty()) { deleteNode(node); } else if (node.prev != null && (Node.NODE_SIZE - 1 - node.prev.rightIndex) >= node.size) { // Remaining entries fit in the prev node, move them and delete this node node.prev.addEntriesRight(node); deleteNode(node); } else if (node.next != null && node.next.leftIndex >= node.size) { // Remaining entries fit in the next node, move them and delete this node node.next.addEntriesLeft(node); deleteNode(node); } else if (node.next != null && node.next.size < (Node.NODE_SIZE - 1 - node.rightIndex)) { // Entries in next node will fit in this node, move them and delete next node.addEntriesRight(node.next); deleteNode(node.next); } return entry; }
private E removeElementAt(Node<E> node, int index) { modCount++; size--; E entry = node.removeEntryAt(index); if (node.prev != null && (Node.NODE_SIZE - 1 - node.prev.rightIndex) >= node.size) { // Remaining entries fit in the prev node, move them and delete this node node.prev.addEntriesRight(node); deleteNode(node); } else if (node.next != null && (node.next.leftIndex) >= node.size) { // Remaining entries fit in the next node, move them and delete this node node.next.addEntriesLeft(node); deleteNode(node); } else if (node.prev != null && node.prev.size < node.leftIndex) { // Entries in prev node will fit in this node, move them and delete prev node.addEntriesLeft(node.prev); deleteNode(node.prev); } else if (node.next != null && node.next.size < (Node.NODE_SIZE - 1 - node.rightIndex)) { // Entries in next node will fit in this node, move them and delete next node.addEntriesRight(node.next); deleteNode(node.next); } return entry; }
private E removeElementLeft(Node<E> node) { modCount++; size--; E entry = node.removeEntryLeft(); if (node.isEmpty()) { deleteNode(node); } else if (node.prev != null && (Node.NODE_SIZE - 1 - node.prev.rightIndex) >= node.size) { // Remaining entries fit in the prev node, move them and delete this node node.prev.addEntriesRight(node); deleteNode(node); } else if (node.next != null && node.next.leftIndex >= node.size) { // Remaining entries fit in the next node, move them and delete this node node.next.addEntriesLeft(node); deleteNode(node); } else if (node.prev != null && node.prev.size < node.leftIndex) { // Entries in prev node will fit in this node, move them and delete prev node.addEntriesLeft(node.prev); deleteNode(node.prev); } return entry; }