Ok, here is my code, I added a function to add a node to the beginning, the middle or the end of the list:

So far so good, but I have a problem....if I haven't created the list, I want that addToList() to create it...but it doesn't work...if you want to know what I'm talking about try removing the line that says createList( head, 1 ); like this:Code:`#include <iostream>`

using namespace std;

struct node {

int x;

node* next;

};

void createList( node* root, int size ){ //Creates a list of any size

for(int i = 0; i < size; i++){

root->x = i + 1;

root->next = new node; //Creates a new node at the end of the list

root = root->next; //Moves to that node

root->next = 0; //Sets the end of the list at the current node

} //for

}

void cleanList( node* root ){ //Clears the list from memory

if( root != 0 ) {

while( root->next != 0 ){

node* temp = root; //Assigns temp to be the current head

root = root->next; //Moves the head to the next element

delete temp; //Deletes the temporary head

} //while

} //if

}

void displayList( node* walker ){ //Displays all the elments of the list

while(walker->next != 0 ){

cout << walker->x << endl;

walker = walker->next; //Moves to the next element

} //while

}

node* addToList( node* head, int value ){ //Adds a new node to the

// beginning, the middle or the end

// of the list

node* search_ptr = head; //search_ptr points to the first node

node* newNode = new node; //Creates new node

//If the new value is less than or equal, or greater than the value in the first

// node, then:

if( value <= search_ptr->x ) {

newNode->x = value; //Inserts this new value at the first node

newNode->next = head; // and makes the next pointer in newNode

// to point to the beginning of the list

} else {

node* past_node; //This node stores the last node accessed

while( search_ptr->next != 0 ){ //While is not the end of the list

past_node = search_ptr; //past_node equals the current node

search_ptr = search_ptr->next; //Moves to the next node

//If the value is less than or equal to the next value in the node, then

// inserts the new node in the middle of the list

if( value <= search_ptr->x ){

past_node->next = newNode; //Last element in the node points to the

// new node

newNode->x = value; //The new node gets the value

newNode->next = search_ptr; //The next pointer of the new node points

// to the next element in the list

return head; //Returns the whole list

} //if

} //while

//If we get to the last node in the list and the results from the comparissons

// were all false, then it means that this value must be placed at the end of

// the list

if( head->next == 0 ){

newNode->x = value; //Inserts this new value at the first node

newNode->next = head; // and makes the next pointer in newNode

} else {

newNode->x = value; //The new node gets the value

search_ptr->next = newNode; //Search_ptr is now the last element in the

// in the list, so we make the next pointer

// of the last element to point to the newNode

newNode->next = 0; // and newNode becomes the last element in the

// list

return head; //Returns the whole list

}

}

return newNode; //Returns the address of the new first node

}

int main(){

node* head; //First node in the list

head = new node; //Creates the first element

createList( head, 1 );

head = addToList( head, 10 );

head = addToList( head, 6 );

displayList( head );

cleanList( head );

cin.get();

}

What's wrong?Code:`int main(){`

node* head; //First node in the list

head = new node; //Creates the first element

head = addToList( head, 10 );

head = addToList( head, 6 );

displayList( head );

cleanList( head );

cin.get();

}