为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕丝7291255 2022-08-03 15:47:16
我是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;}
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

这里的问题是


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.

希望这应该有效


查看完整回答
反对 回复 2022-08-03
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您跳过了头节点。尝试替换

    Node currentNode = head;

    Node currentNode = new Node();
    currentNode.next = head;


查看完整回答
反对 回复 2022-08-03
?
呼唤远方

TA贡献1856条经验 获得超11个赞

删除节点后,应更新当前节点引用以及头>下一个节点应指向当前节点。请尝试以下代码:


if (!duplicate) {

    duplicate = true;

    currentNode = currentNode.next;

     head.next= currentNode.next;

}else {

    currentNode.next = currentNode.next.next;

    currentNode = currentNode.next;

    head.next = currentNode;  }

`


查看完整回答
反对 回复 2022-08-03
  • 3 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信