I'm new at nodes and linked lists. I'm having a problem with my make_a_list function. It's supposed to call add_at_back and add_at_front functions alternately to create a linked list. I have code written for my make_a_list function, but it doesn't work. I'm thinking that maybe it's because of the pointers or the last two codes that I wrote that makes the function not work, but I'm not sure.
#include<iostream.h>
using std :: cin;
using std :: cout;
using std :: endl;
#include<stddef.h>
struct node {
int value;
node* next;
};
node* make_a_list();
void print_list(node *list);
node* add_at_front(node* head, int addvalue);
void add_at_back(node *list, int addvalue);
node* MakeNewNode(int);
int main(){
node* mylist;
// create the list and print it
mylist = make_a_list();
print_list(mylist);
add_at_back( mylist, 40);
print_list(mylist);
mylist = add_at_front( mylist, 1);
print_list(mylist);
return 0;
}
node* make_a_list()
// This function creates a linked list containing the even numbers
// from 2 to 20. The pointer of the list is returned to the
// calling function.
{
node head = NULL, *tptr, *tptr2;
for(int i = 20; i >= 0; i - 4) {
tptr = add_at_back(head, i);
tptr2 = add_at_front(head, i -2);
}
head = tptr2;
return head;
}
void print_list(node *list)
// This function accepts as input a pointer to the list
// and prints out all of the elements of the list.
// Each element is separated by a few spaces and
// the last element of the list is terminated by
// a newline.
{
node *ptr = list;
// loop through entire list
while(ptr != NULL) {
// print each element
cout <<" " << ptr->value;
ptr = ptr->next;
}
cout << endl;
return;
}
node* add_at_front(node* head, int addvalue)
// This function accepts as input a pointer to the list
// and an integer (addvalue). This integer is added
// to the front of the list. The pointer to the start
// of the list is then returned.
{
node *newptr;
// create a new node
newptr = MakeNewNode(addvalue);
newptr->next = head;
// return pointer that points to front of list
head = newptr;
return head;
}
void add_at_back(node *list, int addvalue)
// This function accepts as input a pointer to the list
// and an integer (addvalue). This integer is added
// to the end of the list.
{
node *newptr, *tempptr=list;
if(list == NULL) {
MakeNewNode(addvalue);
return;
}
// loop until you reach last node in list
while(tempptr->next != NULL) {
tempptr = tempptr->next;
}
// create a new node with appropriate values
// and add it to the list
newptr = MakeNewNode(addvalue);
tempptr->next = newptr;
newptr->next = NULL;
return;
}
node* MakeNewNode(int x) {
node *ptr;
ptr = new node;
ptr->value = x;
return ptr;
}