- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 528
Open
Description
The next broken code is accepted:
@Override
    public T remove(int index) {
        checkIndex(index, size);
        if (index == 0) {
            return removeHead();
        } else if (index == size - 1) {
            return removeTail();
        } else {
            return removeInBetween(index);
        }
    }
    private T removeInBetween(int index) {
        Node<T> previous = getNodeByIndex(index - 1);
        T removed = previous.next.element;
        previous.next = previous.next.next;
        size--;
        return removed;
    }
    private T removeTail() {
        T removed = tail.element;
        Node<T> preTail = getNodeByIndex(size - 2);
        preTail.next = null;
        tail = preTail;
        size--;
        return removed;
    }
    private T removeHead() {
        T removed = head.element;
        head = head.next;
        size--;
        return removed;
    }
Please consider the following example:
LinkedList<Integer> list = LinkedList.of(10);
        System.out.println(list.remove(0));
        System.out.println(list.size());
        System.out.println(list.getLast());
In this example, we can still get the "last" element even if size == 0.
It's necessary to reassign tail, as shown below:
private T removeHead() {
        T removed = head.element;
        head = head.next;
        size--;
        if(head == null){
            tail = null;
        }
        return removed;
    }
Metadata
Metadata
Assignees
Labels
No labels