我有一个使用节点的链表,还有一个方法,当你添加一个数字时,该方法会对它们进行排序。所以当我把数字相加后,输出的是一个排序列表,问题是我必须计算一个数字重复了多少次,所以也许我的节点方法是这样的:
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,然后继续更新所有旧元素,直到你到达一个具有不同值的元素(这是基于排序的链表,这就是你现在正在处理的)