如何删除链表中的特定单词(节点)

时间:2019-03-04 23:09:19

标签: 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 个答案:

答案 0 :(得分:0)

您的代码实际上是正确的,缺少的部分只是您忘记检查链表的标题。

  

我有一个要删除节点的问题,但是当我打印列表时它仍然存在

我不确定为什么不能删除节点。检查这些值,因为它们的大小写可能不同(一个是小写,另一个是大写)。但是,如果您不关心大小写,则只需更改插入方法,然后将所有要插入的单词转换为小写/大写即可。

我刚刚对您的代码做了一些调整。请参阅以下内容:

    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();
        }
    }