I am trying to create a stack using single linked list, my push operation doesn't insert data into the linked list
This is what I have tried so far,
typedef struct element {
int data;
struct element *next;
}node;
The push method
void push(node *root, int data) {
if(root == NULL) {
root = (node *) malloc (sizeof(struct element));
root->data = data;
root->next = NULL;
}
else {
node *temp = (node *) malloc (sizeof(struct element));
temp->data = data;
temp->next = root;
root = temp;
}
}
In my main method, I haven't malloced the head pointer,
and this is how I call the push method,
push(head, data);
How can I make the push operation work?
The root pointer is modified in the push function. This value is not propagated to main. One way to do it is to return the root pointer.
node* push(node *root, int data) {
if(root == NULL) {
root = (node *) malloc (sizeof(struct element));
root->data = data;
root->next = NULL;
}
else {
node *temp = (node *) malloc (sizeof(struct element));
temp->data = data;
temp->next = root;
root = temp;
}
return root;
}
And in main, you need to call it like,
head = push(head, data);
Your root value is a pointer, but the address is passed by value, meaning that if you modify the address, it will have no side effect outside the scope of the function.
Use:
void push(node **root, int data )
To be able to modify the value of root
and:
push( &head, data )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With