【问题标题】:search and remove a node from linked list从链表中搜索并删除一个节点
【发布时间】:2020-01-14 12:36:25
【问题描述】:

我使用链表而不使用集合类进行数据结构练习。 在将元素值传递给函数后,我想从链表中删除一个元素

这是我写的函数。

public boolean remove(String s)
    {
        if(head.getName().equalsIgnoreCase(s))
        {
            head = head.getNext();
            return true;
        }

        else
        {
            Node p =head;
            Node current=p.getNext();

            while(true) {
                if(current == null || current.getName().equals(s)) {
                    break;
                }
                p = current;
                current = current.getNext();
            }
            if (current == null)
            {
                p.setNext(current.getNext());
                return true;
            }
        }
        return false;
    }

我正在使用节点 p 来存储前一个节点和当前节点。

代码位于 return false 部分,列表中没有变化。另外,我在 p.setNext(current.getNext( )) 在这里。

请让我知道我在哪里犯了错误。

【问题讨论】:

  • if (current == null) 应该是 if (current!= null)
  • 谢谢大家.....真是个愚蠢的错误。
  • 您是否成功实施了这份清单?需要更多帮助?
  • 是的,这只是我的一个愚蠢的错误。列表工作正常。

标签: java data-structures linked-list


【解决方案1】:

关于空指针异常,这应该会响起

if (current == null)
{
    p.setNext(current.getNext());
    return true;
}

current 为 null,您正尝试从中调用方法。

此外,您似乎没有处理极端情况,例如列表为空或只有一个元素。

【讨论】:

    【解决方案2】:
    current == null
    

    是未找到的情况。当current == null 我们应该返回false,调用current.getNext() 将给出空指针错误。同样,找到的案例也没有进入您想要的区块。我认为,在你有if (current == null) 的地方说if (current != null) 就足够了

    我发现https://www.geeksforgeeks.org/linked-list-set-3-deleting-node/ 很有帮助。

    【讨论】:

      【解决方案3】:

      您应该有一个布尔标志,而不是根据可能为空或不为空的当前值检查真实条件。 如果找到传递的元素,则可以使该标志值为真。

      while(true) {
                      if(current == null || current.getName().equals(s)) {
                      flag = true;
                          break;
                      }
                      p = current;
                      current = current.getNext();
                  }
                  if (flag)
                  { 
                  if(current!=null)
                      p.setNext(current.getNext());
                  return true;
                  }
      

      【讨论】:

        猜你喜欢
        • 2011-06-06
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2020-02-26
        相关资源
        最近更新 更多