------------------------------------------------------------------------------
MC logo
Linked List (Structs)
[^] CSc 220 Home
------------------------------------------------------------------------------
[Introduction] [Boolean and Control] [Functions] [Arrays and Pointers] [Dynamic Arrays] [Array Errors] [Command Array] [Standard Containers] [Structs and Classes] [Automatic Pointer] [Multi-File Programs] [Copying Objects] [Templates] [Inheritance] [Plain C I/O] [Type Odds And Ends] [Plain C Strings] [File I/O]
[Plain Structs] [Point With Struct] [C++ Point Class] [Linked List (Structs)] [Linked List (Classes)] [C++ v. Java Classes I] [Prime Generator Algorithm] [Fast Primes Generator]
strlnk.cpp
#include <iostream>

using namespace std;

/*
 * This program reads integers into a linked list, then prints them
 * out backwards.  It won't compile as a C program, but it is written
 * in a plain-C-ish style, using a struct but no classes.
 */

// Linked list node structure.
struct lnode
{
        int cont;               // Contained node.
        struct lnode *next;     // Next node.
};

/* 
 * Add an integer to the front of the list, and return the new list. 
 */
struct lnode *add_front(int val, struct lnode *list)
{
        // Allocate the space.
        struct lnode *newnode = new lnode;

        // Fill it in.
        newnode->cont = val;
        newnode->next = list;

        return newnode;
}

/* 
 * Free the memory used to by the argument list head. 
 */
void free_list(struct lnode *list)
{
        // Go through the nodes and delete each one.
        while(list != NULL) {
                // Remember the current list head, then advance it.
                struct lnode *zombie = list;
                list = list->next;

                // Free the node.
                delete zombie;
        }
}

main()
{
        /* Linked list head pointer. */
        struct lnode *list_head = NULL;

        // Read the list contents and add each integer to the front of
        // the list.  The list is thus built in reverse order.
        int newval;
        while(cin >> newval)
                list_head = add_front(newval, list_head);

        cout << "-------------------------------------------------" << endl;

        // Scan the list and print it.
        struct lnode *scan;
        for(scan = list_head; scan != NULL; scan = scan->next)
                cout << scan->cont << " ";
        cout << endl;

        // Free the list nodes.
        free_list(list_head);
}