Connecting Tech Pros Worldwide Help | Site Map

SHuffling a Linked List

RishiD
Guest
 
Posts: n/a
#1: Nov 15 '06
Hi,

Trying to shuffle a linked list of cards around. I know not the ideal
structure to use, but it is what my professor wants. I wrote all the
code and the logic makes sense, but for some reason when my random
integer is 0, it links the current node to itself and just breaks the
entire linked list.

Thanks for any help,

Rishi

void shuffle()
{

node<card*curr = NULL, *prev = NULL;

int myIndex;

randomNumber rnd;

// move 50 cards around
for (int i = 0; i < 50; i++)
{
long rndNum = rnd.random(52);

myIndex = 0;

curr = front;

// scan until index reaches rndNum or reach end of list
while (curr != NULL && myIndex != rndNum)
{
prev = curr;
curr = curr->next;
myIndex++;
}

// if prev == null, that means we are shuffling first node so just
dont do anything
if (prev != NULL)
{
cout << myIndex << " - curr " << curr->nodeValue.getValue() << "
prev " << prev->nodeValue.getValue() << endl;
prev->next = curr->next;
curr->next = front;
front = curr;
}
}
}

Mark P
Guest
 
Posts: n/a
#2: Nov 15 '06

re: SHuffling a Linked List


RishiD wrote:
Quote:
Hi,
>
Trying to shuffle a linked list of cards around. I know not the ideal
structure to use, but it is what my professor wants. I wrote all the
code and the logic makes sense, but for some reason when my random
integer is 0, it links the current node to itself and just breaks the
entire linked list.
>
Thanks for any help,
>
Rishi
>
void shuffle()
{
>
node<card*curr = NULL, *prev = NULL;
You initialize prev once, up here, and then...
Quote:
>
int myIndex;
>
randomNumber rnd;
>
// move 50 cards around
for (int i = 0; i < 50; i++)
{
long rndNum = rnd.random(52);
>
myIndex = 0;
>
curr = front;
>
// scan until index reaches rndNum or reach end of list
while (curr != NULL && myIndex != rndNum)
{
prev = curr;
curr = curr->next;
myIndex++;
}
>
// if prev == null, that means we are shuffling first node so just
dont do anything
.... you check it down here, when it may not have been reinitialized.
Think: what is the state of prev in the case where rndNum = 0?
Quote:
if (prev != NULL)
{
cout << myIndex << " - curr " << curr->nodeValue.getValue() << "
prev " << prev->nodeValue.getValue() << endl;
prev->next = curr->next;
curr->next = front;
front = curr;
}
}
}
>
Closed Thread


Similar C / C++ bytes