【发布时间】:2015-06-30 23:05:57
【问题描述】:
我有一个本质上是伪库的类。驱动程序创建库 NoviceLibrary,它可以做不同的事情,比如向库中添加书籍(链表 ListNode 的节点)、删除书籍等等。
shuffleBooks() 是我必须编写的最后一个函数。其他一切正常,可以添加/删除书籍。该函数需要将链表中的节点随机排列。我不能使用在其他算法中见过的尾指针。我不能使用数组。我以为我写的是指针 p1 和 p2 可以交换列表中的节点。程序停止并且在日志中没有给我有用的信息。
void shuffleBooks (int bookCount)
{
int r1 = rand() % bookCount;
int r2 = rand() % bookCount;
ListNode *p1 = head;
ListNode *p2 = head;
// Here I am trying to get the swap to happen 4 times the bookCount
for (int i = 0; i < bookCount*4; i++)
{
for (int i = 0; i < r1; i++)
p1 = p1->next;
for (int i = 0; i < r2; i++)
p2 = p2->next;
swap(p1->bookVal, p2->bookVal);
}
}
【问题讨论】:
-
请在问题中输入代码(否则链接失效时问题将变得无用)
-
请提供MCVE
-
“我不确定我哪里出错了。” - 没关系,我们不确定你在问什么,所以我们是平等的。跨度>
-
让我重新措辞并尽量说清楚。很抱歉!
-
p1,p2,r1和r2应该在for循环内,swap只是交换p1和p2中的值,而不是它们指向的对象的内容。
标签: c++ linked-list