x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 386

Sorry for posting in this in the wrong forum before...

Hi,

I've succesfully created a Queue with a singly linked list and have no problem with writing a function to print out the result in order, but I need to print out the list in reverse order, preferably recursively.  Here is my code.  Thanks in advance.

struct Node{
int key;
Node *next;
};

void printInReverse(Node * Head);   //function prototype to print in reverse

int main(){
int x;  //variable displaying dequeue value

for (int i =1; i < 10 ; i ++){   //loop to populate enqueue

Node * newPtr = new Node;
newPtr->key = i;
newPtr->next = NULL;

{
((header == 0) && (back == 0))
newPtr = 0;
}

{
back->next = newPtr;
back = newPtr;
newPtr = 0;
}
}
// ******END list population*********

// ******BEGIN dequeue *********

Node *tmpPtr = new Node;

header = back = 0;  //Queue is empty

x = tmpPtr->key;
tmpPtr = 0;

// ******END dequeue function psuedocode *********

//more testing ..................................
cout << x << "= int x" << endl << endl;
//END testing ...................................

*/

printInReverse(header);   // call function to print list in reverse

system("pause");
return 0;
}

// ******BEGIN function to print in reverse*********
{
cout << "List is empty." << endl;
}
//int count = 0;
Node *printPtr = new Node;

while(printPtr != 0)
{

cout << printPtr->key << endl;
printPtr = printPtr->next; //advance pointer to next location in list...
}
}

// ******END function to print in reverse*********
0
r3r
• 3
• 2
1 Solution

Commented:
Hi,

You are simply printing the data.... you should recursion

I think the following will do it for you..

{
if ( Head == NULL )
{
return ;
} else {
}

}

Dennis
0

Author Commented:
Thanks man, that's awesome.  Works great.  One more question...
Can you explain the last line..

specifically the " %d " part.  The Head->key argument is obvious.  I'm really new to this stuff (like you didn't know that already!!)

Thanks again.. you get 500 big ones!
0

Commented:
I think there is many programatic and logical flaw in your code.... I corrected those ... please read the comments I have written in between the code.....

Note :: Never never jump into coding before you design what you want to do.... First take a pen and paper draw diagrams and/or rough algo so that you are clear what and how will you acheive your goal.....

e.g.

Now you want to print it reverse way.....
So check how will you do.... to print it reverse First you have to go at the end then go back....
So devise a method that how will you go at the end and also how will you come back......

Making a software or a program is not how you code but rather how you design and how you provide the solution.

struct Node{
int key;
Node *next;
};

void printInReverse(Node * Head);   //function prototype to print in reverse

int main()
{
//  Node *header = new Node; // It should not be assigned memory at this stage
Node *back = NULL ;

//  int x;  //variable displaying dequeue value

for (int i = 1; i < 10 ; i ++){   //loop to populate enqueue

Node * newPtr = new Node;
newPtr->key = i;
newPtr->next = NULL;

} else {
back->next = newPtr;
back = newPtr;
newPtr = NULL;
}
}

// ******END list population*********

// ******BEGIN dequeue *********

//  Node *tmpPtr = new Node;  // Never Do this :: Here you are allocating memory for tmpPtr
// And Hence earlier memory allocated for tmpPtr is lost...
// i.e you cannot free that memory (Memory Leak)

//   Node *tmpPtr = header ;

//       header = back = 0;  //Queue is empty

//     x = tmpPtr->key;
//     tmpPtr = 0;

// ******END dequeue function psuedocode *********

//more testing ..................................
//     cout << x << "= int x" << endl << endl;
//END testing ...................................

printInReverse(header);   // call function to print list in reverse
printf("\n") ;

system("pause") ;

return 0;
}

// ******BEGIN function to print in reverse*********

{
if ( Head == NULL )
{
return ;
} else {
}

}

Dennis
0

Commented:
Hi,

is similar to

printf is a function defined in stdio.h // used in C
and cout is used in c++ // defined in iostream.h

Dennis
0

Author Commented:
Thanks again...some of the code was preformated and I couldn't change it, but I don't doubt there is a lot of sloppy logic going on...  I'll study your notes and corrections.  And yes, I have been having problems with memory leaks as well.
0

Commented:
Hi r3r,
> print out the list in reverse order, preferably recursively
Smells like what one would do in functional programming :-)

Be aware that the length of a list you can print this way is very limited, since your recursive function needs stack for each recursion.
recursion.

Cheers,
Stefan
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.