我有一个使用节点的链表,我也有一种方法,当你添加一个数字时,方法对它们进行排序。所以当我完成添加数字输出是一个排序列表,问题是我必须计算一个数字重复的次数,所以也许我所拥有的节点方法就是这个:
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;
}
}
}
当我运行程序循环时,代码不起作用(显然)。
我是新手,所以我不知道我做错了什么,你们能帮帮我吗?
答案 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值的元素(这是基于您正在使用的已排序链接列表)