Java - 从LinkedList中删除元素,除了第一个

我是Java的新手。

我创建了一个方法,它将从LinkedList中删除除第一个元素之外的元素。这个想法是,如果LinkedList的元素数据(以整数为单位)与参数匹配,则布尔值将设置为true。一旦布尔值设置为 true,它将删除也与初始元素匹配的任何元素。

现在来看看问题。例如,如果我要从此LinkedList中删除5个,除了第一个:

5 5 5 6 5 7 8 9

我会得到这样的结果:

5 5 6 7 8 9

如您所见,它没有删除第二个位置上的5。我的代码有什么问题吗?

顺便说一下,这是代码

public void append(int data) {

    Node newNode = new Node(data);

    if (head == null) {

        head = new Node(data);

        return;

    }


    Node lastNode = head;

    while (lastNode.next != null) {

        lastNode = lastNode.next;

    }


    lastNode.next = newNode;

    return;

}


public void insert(int data) {

    Node newData = new Node(data);

    newData.next = head;

    head = newData;

}


public void removeExceptFirst(int dataValue) { //The mentioned method

    boolean duplicate = false;

    Node currentNode = head;

    while (currentNode.next != null) {

        int value = currentNode.next.data;

        if (value == dataValue) {

            if (!duplicate) {

                duplicate = true;

                currentNode = currentNode.next;

            } else {

                currentNode.next = currentNode.next.next;

            }

        } else {

        currentNode = currentNode.next;

        }

    }

    return;

}


慕丝7291255
浏览 116回答 3
3回答

GCT1015

这里的问题是if (!duplicate) {     duplicate = true;     currentNode = currentNode.next;} 您正在将replicate = true标记为true并立即分配“currentNode = currentNode.next;”,由于此引用正在保留下一个节点,因此1. Put the condition outside of the loop to check whether the head element itself is    that node, if->yes mark isDuplicate = true and proceed in the loop.2. Inside the loop check afterward and then assign the next node.希望这应该有效

神不在的星期二

您跳过了头节点。尝试替换    Node currentNode = head;跟    Node currentNode = new Node();     currentNode.next = head;

呼唤远方

删除节点后,应更新当前节点引用以及头>下一个节点应指向当前节点。请尝试以下代码:if (!duplicate) {    duplicate = true;    currentNode = currentNode.next;     head.next= currentNode.next;}else {    currentNode.next = currentNode.next.next;    currentNode = currentNode.next;    head.next = currentNode;  }`
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java