Connecting Tech Pros Worldwide Help | Site Map

SHuffling a Linked List

  #1  
Old November 15th, 2006, 12:05 AM
RishiD
Guest
 
Posts: n/a
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;
}
}
}

  #2  
Old November 15th, 2006, 05:25 AM
Mark P
Guest
 
Posts: n/a

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 Threads
Thread Thread Starter Forum Replies Last Post
Re: Solution needed..urgent!! Juha Nieminen answers 10 November 7th, 2008 04:55 AM