Thread: Don't Understand Outputting Linked Lists Elements

1. Don't Understand Outputting Linked Lists Elements

I'm currently studying Jumping into C++.

I understand the concept of Linked Lists, but using linked lists has me stumped.

In the below code (from linked list tutorial), I have "conductor = root; commented out (//) before the second if statement. It outputs "test" and "42".

If I "un-comment" the "conductor = root" line, the output is "test" and "12".

question - why doesn't the code make it to the second while statement and cout "test 123" for both cases?

Code:

#include <iostream>
#include <cstddef>

using std::cout;
using std::cin;
using std::endl;

struct node
{
int x;
node *next;
};

int main ()
{
cout<< " test \n ";
node *root;         // This will be the unchanging first node
node *conductor;    // This will point to each node as it traverses the list

root = new node;    // Sets it to actually point to something
root->next = 0;     // Otherwise it would not work well
root->x = 12;
conductor = root;   // The conductor points to the first node
if ( conductor != 0)
{
while ( conductor->next != 0)
conductor = conductor->next;
}
conductor->next = new node;     // Creates a node at the end of the list
conductor = conductor->next;    // Points to that node
conductor->next = 0;            // Prevents it from going any further
conductor->x = 42;

//conductor = root;

if (conductor != 0 )
{
while ( conductor->next = 0 )
{
cout<< "test 123" << endl;
cout<< conductor->x;
conductor = conductor->next;
}
cout << conductor->x;
}
} 2. > //conductor = root;
You need to do this.

> while ( conductor->next = 0 )
And this needs to be != 0

Also, delete line 50 (the one outside your loop). 3. Thank You!

Line 50 needs to be there so it COUT's the last element (42). The last element has next = 0 and the while loop goes until next != 0.

I think linked lists is finally starting to gel. 4. I feel like you have to choose different book for Jumping into C++

Looking at this sample I not really sure that C++ is what you will be learning with it.

you should not declare the var without initializing it.
you should use the constructor in your node struct that initialize both members - instead of leaving it to the user of your struct to do it (or not to do it) later.
you should be learning to use std::forward_list<int> before trying to write your own implementation of it

It is like your are trying to learn C but use some keywords from C++ like "new" here and there.
I really doubt is it a best approach to the modern C++ 5. Modern C++ comes with lots of containers and algorithms so it would be much better to learn to use them.
It has some educational benefit to learn to write some of your own, but this is for advanced users,
not for beginner or intermediate level. Popular pages Recent additions Tags for this Thread

conductor, conductor-next, linked, node, test 