我有一个链接列表,我想实现一个功能:
Random_Shuffle_List (struct node **Headptr)
- 输出一个列表,使每个节点从其原始位置随机移动。
请帮我一个有效的算法来实现这一目标。
答案 0 :(得分:14)
我会推荐天真的方法:
当然,这使用了相对微小的额外内存,但我认为它在实现(和理解)时间方面比在链接列表上直接工作的方法更有效。
答案 1 :(得分:0)
简单地反转链接列表并交换中间节点和结束节点。我认为这将工作。复杂性将是O(n)。
答案 2 :(得分:0)
一种方法是初始化一个额外的字段,该字段将包含由随机函数生成的随机数。
width:100%
答案 3 :(得分:-1)
n
a
和b
0
,n
)
a
和b
。m
次。这不是一个好方法,但不需要额外的内存作为@ unwind的建议。
@ unwind的解决方案是使用一个窗口,可以做一件事。
w
w
(窗口)的子列表m
次。