Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

push operation on stack using linked list fails

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?

like image 709
cyberpirate92 Avatar asked Jan 20 '26 10:01

cyberpirate92


2 Answers

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);
like image 74
Rishikesh Raje Avatar answered Jan 23 '26 01:01

Rishikesh Raje


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 )
like image 34
dvhh Avatar answered Jan 23 '26 00:01

dvhh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!