链接列表发生故障

时间:2015-01-22 19:14:16

标签: java linked-list

我正在尝试创建一个链接的最后一个类,它将存储数据以及数据显示的频率。

例如,如果某人将整数5添加到链接列表12次,则当询问5的频率(getFrequencyOf(5)时)时,结果应为{ {1}}。

不幸的是,添加到我的链接列表的第一个数字返回的频率低于它应该的频率。我的代码发布在下面。任何关于如何解决这个问题的想法将不胜感激。

12

1 个答案:

答案 0 :(得分:4)

add中的逻辑错误。当您仅完成add一次(即在第二次add操作中)时,您跳过第一个节点而不进行测试,因为此时firstNode.nextnull

while (currNode.next != null)成为while (currNode != null)。请参阅下面的正确版本(仅针对该特定问题:我没有对所有预期行为进行测试,因为我没有您的规范)。

请注意,代码可以如图所示缩短(之后更多)。开始编写单元测试,你可以更快地发现这样的错误,并且更有信心地重构,以使你的代码更短,更容易理解。

修正:

public void add(T aData)
{       
    if(firstNode!=null){
        boolean found =false;
        Node currNode=firstNode;

        while(currNode != null){
            if(currNode.data.equals(aData)){
                currNode.addF();
                found=true;
                break;
            }
            currNode= currNode.next;
        }

        if(!found){
            Node tempNode=firstNode;
            firstNode= new Node(aData,tempNode);
        }
    }
    else {
        firstNode= new Node(aData,null);
    }
    numOfItems++; 
}

更正并缩短:

public void add(T aData)
{       
    boolean found =false;
    Node currNode=firstNode;

    while(currNode != null){
        if(currNode.data.equals(aData)){
            currNode.addF();
            found=true;
            break;
        }
        currNode= currNode.next;
    }

    if(!found){
        Node tempNode=firstNode;
        firstNode= new Node(aData,tempNode);
    }
    numOfItems++; 
}