如何从链表中获取统一的随机元素?通过计算列表的长度 当你计算时,生成一个随机元素。如果随机元素%列表的长度 等于0,然后选择该元素。
答案 0 :(得分:1)
在开始挑选元素之前,首先需要列表的长度,因此在列表中平均需要1.5次迭代。
第一个是获取列表的长度。 然后得到一个随机数[0 ... 1]乘以列表的长度,向下舍入。 这是你必须获得的索引(你必须进行另一次迭代)。
伪代码中的:
int n = list.size() // Returns length of list
int index = (int) (random_value() * n); // random_value returns a value between 0.0 and 1.0
int* node = list.start() // goto start of list
for (int iter = 0; 0 < n; n++)
node = node->next() // Goto next node
return node