как удалить определенное слово (узел) в связанном списке

#java

#java

Вопрос:

У меня проблема. Я хочу удалить узел, но он все еще существует, когда я печатаю список. Я не знаю, в чем проблема.

 public void REMOVEWORD(String word) {
    //declare and initialize a help pointer 
    Word helpPtr = head;
    while (helpPtr.getNext() != null) {
        if (helpPtr.getNext().getWord().equals(word)) {
            helpPtr.setNext(helpPtr.getNext().getNext());
         //subtract the frequency of the word to be deleted from the list
            int total = helpPtr.getNext().getFrequency() - countWords;
            break;
        }
        helpPtr = helpPtr.getNext();
    }
}
  

Комментарии:

1. Для начала вы фактически никогда не проверяете значение в «head»; вы сразу пропускаете его, переходя прямо к getNext() .

2. Спасибо! теперь метод работает идеально

Ответ №1:

Ваш код на самом деле правильный, недостающая часть просто заключается в том, что вы забыли проверить заголовок linkedlist.

У меня проблема в том, что я хочу удалить узел, но он все еще существует, когда я печатаю список

Я не уверен, почему вы не можете удалить узел. Проверьте значения, поскольку, возможно, они отличаются по регистру (одно в нижнем регистре, а другое в верхнем). Но если вас не волнуют регистры, просто измените свой метод вставки и преобразуйте все вставляемые слова в нижний / верхний регистр.

Я только что внес небольшую корректировку в ваш код. Смотрите ниже:

     public void REMOVEWORD(String word) {
        // declare and initialize a help pointer
        Word helpPtr = head;

        // ADD THIS PART (START)
        if (helpPtr.getWord().equals(word)) { // check if the head is the to be removed word
            head = helpPtr.getNext(); // if true then set head to head.getNext()
            return;
        }
        // ADD THIS PART (END)

        while (helpPtr.getNext() != null) { // iterate through the linkedlist
            if (helpPtr.getNext().getWord().equals(word)) { // check if the next node is the word to be removed
                Word next = helpPtr.getNext().getNext(); // if true then get the next node of the next node
                helpPtr.setNext(next); // set the next of the current node to the acquire node above
                // subtract the frequency of the word to be deleted from the list
                // int total = helpPtr.getNext().getFrequency() - countWords; // NOT SURE WHAT
                // THIS CODE WILL DO SO I JUST COMMENTED IT OUT
                break;
            }
            helpPtr = helpPtr.getNext();
        }
    }