Удалите узел из списка Singlely Linked по любому индексу, используя единственный метод / функцию в Java - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу создать и удалить узел из односвязного списка в Java.Метод удаления возьмет индекс узла и удалит этот узел.

Логика работает, но она не удаляет узел при первом индексе (0). Как мне изменить этот код, чтобы он мог удалять узел в любой позиции без использования дополнительных циклов.Я знаю, что я использую начальный индекс как 1 в коде, но я не могу понять, что если введенный индекс равен нулю, то как программа может удалить «предыдущий узел», используя тот же цикл.Это потребует еще один цикл (на основе этой логики).Есть ли способ удалить этот дополнительный цикл

public E deleteNode(int t) throws IndexOutOfBoundsException{
        if(size==0) 
            return null;

        if(t>=size) 
            throw new IndexOutOfBoundsException("Invalid Input");

        Node<E> previousNode=head;
        Node<E> currentNode=previousNode.getNext();
        int currentIndex=1;


        while(currentIndex<t){

            previousNode=previousNode.getNext();
            currentNode=previousNode.getNext();
            currentIndex++;
        }
        previousNode.setNext(currentNode.getNext());
        size--;
        return currentNode.getElement();
    }

Если пользователь вводит индекс 0, то вывод {1,2,3,4} должен быть {2,3,4}, но я получаю{1,3,4}.

1 Ответ

0 голосов
/ 25 сентября 2019

Один из вариантов - обрабатывать его как особый случай, так как он требует обновления head.

if (t == 0) {
    head = head.getNext();
}
//rest of your code..
Node<E> previousNode=head;
//...

Или вы можете сделать как

Node<E> previousNode = null;
Node<E> currentNode = head;
int currentIndex = 0;

while(currentIndex < t) {
    previousNode = currentNode;
    currentNode = currentNode.getNext();
    currentIndex++;
}
if (previousNode == null) { //removing first node
    head = head.getNext();
} else {
    previousNode.setNext(currentNode.getNext());
}
size--;
return currentNode.getElement();

Но в любом случае вам нужнообрабатывать его как особый случай.

...