Thread: Don't Understand Outputting Linked Lists Elements

  1. #1
    Registered User
    Join Date
    Aug 2017
    Posts
    7

    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. #2
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,659
    > //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).
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

  3. #3
    Registered User
    Join Date
    Aug 2017
    Posts
    7
    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. #4
    Hurry Slowly vart's Avatar
    Join Date
    Oct 2006
    Location
    Rishon LeZion, Israel
    Posts
    6,788
    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++
    All problems in computer science can be solved by another level of indirection,
    except for the problem of too many layers of indirection.
    – David J. Wheeler

  5. #5
    Registered User
    Join Date
    Jun 2017
    Posts
    157
    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 subscribe to a feed

Similar Threads

  1. Double Linked Dynamic Lists Vs Unrolled Linked Lists
    By lantzvillian in forum C Programming
    Replies: 6
    Last Post: 02-14-2012, 01:07 PM
  2. Linked Lists (I don't understand...at all?)
    By Bonnet in forum C++ Programming
    Replies: 3
    Last Post: 08-23-2011, 07:05 AM
  3. Replies: 21
    Last Post: 10-14-2006, 04:38 AM
  4. Replies: 22
    Last Post: 10-22-2005, 08:42 AM
  5. question on linked lists(stack with linked lists)
    By dionys in forum C Programming
    Replies: 1
    Last Post: 06-02-2004, 11:08 AM

Tags for this Thread