#include struct Node { Node( int v=0 ) { value = v; next = 0; } int value; Node* next; }; Node* root = 0; void add( Node** nodeAddress, Node* next ) { if ( ! *nodeAddress) { *nodeAddress = next; return; } Node* current = *nodeAddress; while (current->next) current = current->next; current->next = next; } void traverse( Node* n ) { std::cout << n->value << ' '; if (n->next) traverse( n->next ); } void main( void ) { for (int i=1; i < 10; i++) add( &root, new Node( i ) ); traverse( root ); std::cout << std::endl; } // 1 2 3 4 5 6 7 8 9 #if 0 namespace Mine { struct Node; extern Node* root; void add( Node** nodeAddress, Node* next ); void traverse( Node* n ); } struct Mine::Node { Node( int=0 ); int value; Node* next; }; void main( void ) { for (int i=1; i < 10; i++) Mine::add( &Mine::root, new Mine::Node( i ) ); Mine::traverse( Mine::root ); std::cout << std::endl; } Mine::Node::Node( int v ) { value = v; next = 0; } Mine::Node* Mine::root = 0; void Mine::add( Node** nodeAddress, Node* next ) { if ( ! *nodeAddress) { *nodeAddress = next; return; } Node* current = *nodeAddress; while (current->next) current = current->next; current->next = next; } void Mine::traverse( Node* n ) { std::cout << n->value << ' '; if (n->next) traverse( n->next ); } #endif