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



我有一个使用节点的链表,还有一个方法,当你添加一个数字时,该方法会对它们进行排序。所以当我把数字相加后,输出的是一个排序列表,问题是我必须计算一个数字重复了多少次,所以也许我的节点方法是这样的:

 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;
        }
    }
}

当我运行程序时,代码不起作用——方法循环。

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

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

迭代所有节点,然后将Map.value += 1放回地图中。然后你可以通过说:Map.get(value);来计算一个值的频率。

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

插入元素时要跟踪频率。

2个需要考虑的案例:

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

否则,如果它是一个重复的元素,那么当你在链表中找到该元素的第一个具有相同值的实例时,将新元素的freq设置为oldelement.frequency+1,然后继续更新所有旧元素,直到你到达一个具有不同值的元素(这是基于排序的链表,这就是你现在正在处理的)

最新更新