-
help w/linked lists
How do you add an element to the end of a linked list? I've tried to write code and it doesn't work. Everything gets displayed except for the element that I'm suppose to add.
#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);
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;
int num = 20;
while(num){
tptr = new node;
tptr->value = num;
tptr->next = head;
head = tptr;
num -= 2;
}
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 = new node;
newptr->value = 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;
// loop until you reach last node in list
while(tempptr != NULL) {
tempptr->value;
tempptr = tempptr->next;
// create a new node with appropriate values
// and add it to the list
newptr = new node;
newptr->next = list;
newptr->value = addvalue;
list = newptr;
}
return;
}
-
You'll have to return your list otherwise any changes you make will be local to your function. Also, your current function walks through the list but doesn't add the node to the end of it. You could do something like this -
Code:
node* 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 *tempptr=list;
// 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
tempptr->next = new node;
tempptr->next->value = addvalue;
tempptr->next->next=NULL;
return list;
}