为什么这个循环是无限的?(Java)



我正试图为链表添加方法,但由于某种原因(这对我来说并不明显,事实上我来这里是为了帮助找到错误),它每次都会进入无限循环。

编辑:我发现了错误,我将保留我的原始代码,并附上更正后的代码的注释
public void insert(String majorName)
{
    MajorNode newNode = new MajorNode(majorName, 1);
    boolean inList = false;
    MajorNode current = first;
    if(isEmpty())
    {
        first = newNode;
                    // inList = true;
    }
    else
    {
        while(current.next != null)
        {
            if(current.majorName.equalsIgnoreCase(majorName))
            {
                current.frequency++;
                inList = true;
                break;
            }
            else
            {
                current = current.next;
            }
        }
    }
    if(!inList)
    {
        newNode.next = first;
        first = newNode;
    }
}

如果需要的话,这里是我的节点类:

public class MajorNode 
{
    public String majorName;
    public int frequency;
    public MajorNode next;
    public MajorNode(String majorName, int frequency)
    {
        this.majorName = majorName;
        this.frequency = frequency;
    }
    public String toString()
    {
        return majorName + " " + frequency;
    }
}

在第一次调用insert()时,假设isEmpty()返回true,因此first被设置为newNode,而newNodenext字段被设置为first的前一个(空)值。因此,当列表非空时,循环无限迭代列表中next字段指向自身的最后一个元素。

出于好奇,为什么您要尝试实现自己的链表功能,而不是构建在可用的包(如java.util.LinkedList)上?

创建第一个节点时:

if(!inList)
{        
    newNode.next = first;        
    first = newNode;    
}

这将第一个节点指向自己…因此一个循环

您应该离开newNode。Next为第一个节点的null,这样当您插入第二个项时,您将到达链的末端。

如果您添加的节点与List的最后一个节点相似,则会有错误的频率。考虑这种情况(在空列表中添加2个类似的节点)

  1. 您将在空白列表中添加node1。首先&Current将指向node1。(但node1。下一个将为null)
  2. 如果您添加相同的节点(或具有相同majorName的节点),您将到达while循环(因为List现在不是空的)。而且,你也不会进入while循环。(作为你的电流。Next仍然为空)你最终会在你的列表中有两个相同的majorName

我建议使用

while(current != null)
不是

while(current.next != null)

相关内容

  • 没有找到相关文章

最新更新