如何计算排序链表(数字)Java上的频率

时间:2014-04-10 23:58:27

标签: java list frequency sorted

我有一个使用节点的链表,我也有一种方法,当你添加一个数字时,方法对它们进行排序。所以当我完成添加数字输出是一个排序列表,问题是我必须计算一个数字重复的次数,所以也许我所拥有的节点方法就是这个:

 class Node {

    int value; 
    int freq;
    Node next;
} private Node root;

现在我正在尝试使用此代码,以便保存比较排序列表值的数字的频率。

public void frequencies(){
    Node neew=root;
    Node current = neew.next;
    int x=0;
    while (neew!=null) {
        if(neew.value==current.value){ 
            neew.freq=x+1;       
        }
        else{
       neew=neew.next;
       current=current.next;
        }
    }

}

当我运行程序循环时,代码不起作用(显然)。

我是新手,所以我不知道我做错了什么,你们能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

看起来您可以拥有两个具有相同值的节点。在这种情况下,我认为Node是存储频率的错误位置。为什么Node会知道其兄弟姐妹的内容?相反,你应该在列表中提出这个问题。存储它的良好数据结构是Map。将Map键设为Node.value,Map值为频率。

迭代所有节点,然后将Map.value += 1放回地图中。然后,您可以通过说出Map.get(value);

来计算出值的频率

答案 1 :(得分:0)

你做这件事的方式并不是一个好的方法,尝试这样的事情

在插入元素时跟踪频率。

要考虑的2个案例:

如果它是新元素,请设置freq = 0

否则如果它是一个重复的元素,那么当你发现该元素的第一个实例在链表中具有相同的值时,设置新元素的freq = old element.frequency + 1然后保持更新所有旧元素,直到到达具有diff值的元素(这是基于您正在使用的已排序链接列表)