Как вы удаляете узлы из связанного списка? - PullRequest
0 голосов
/ 30 марта 2012

У меня есть ссылки на объекты учеников. В основном это база данных, в которой хранятся данные о студентах как объектах студентов. Единственная проблема, с которой я столкнулся - это создание метода removeStudent. Ниже приведено то, что я пробовал до сих пор, изменяя различные его части, чтобы увидеть, если происходит другой результат. Прямо сейчас с помощью этого кода я могу удалить учащегося в своем драйвере, но он также удалит каждого учащегося до того, кого я хочу удалить, оставив только тех учеников, которые находятся в базе данных после того ученика, которого я пытаюсь удалить. удалить.

public void RemoveElements(Object Student) {

    LinearNode<Object> current = element;
    LinearNode<Object> temp = current;




    while (current.getNext()  != null) {

        temp = current;
        current = current.getNext();


        if(current.getElement() == Student) {


        temp.setNext(current.getNext());
        length--;
        }
    }

}

Ответы [ 3 ]

1 голос
/ 30 марта 2012
public void RemoveElements(Object Student) {

    LinearNode<Object> current = element;
    LinearNode<Object> previous = null;
    //LinearNode<Object>(student);



    while (current.getNext()  != null) {

        current = current.getNext();


        if(current.getElement() == Student) {

            length--;
            element = element.getNext();
            if (previous != null) { 
               previous.setNext(element.getNext();
            } else {
               //if you have a pointer to the head element place it element.getNext();
            }


        }
        previous = current;
    }

}
0 голосов
/ 30 марта 2012

Похоже, element является главой списка. Посмотрите на код, который меняет element, и измените его так, чтобы при удалении второго элемента element все еще указывал на первый element, а первый элемент указывал на третий вместо второго.

0 голосов
/ 30 марта 2012

Если текущий содержит объект, который нужно удалить, вам нужно получить ссылку на предыдущий узел и указать его на следующем узле.Итак, у вас есть

A -> B -> C

, а B содержит элемент, который нужно удалить, вы хотите, чтобы ваш связанный список выглядел как

A -> C

Несколько вещей не так с вашим кодом

1) Вы не выполняете вышеуказанное
2) Вы не устанавливаете предыдущий в вашем цикле while.Вы можете сделать это прямо перед

current = current.getNext();

3) Для кода

LinearNode<Object> current = element;

вверху, что такое element

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...