cyberpirate92
cyberpirate92

Reputation: 3166

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?

Upvotes: 3

Views: 224

Answers (2)

Rishikesh Raje
Rishikesh Raje

Reputation: 8614

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);

Upvotes: 3

dvhh
dvhh

Reputation: 4750

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 )

Upvotes: 1

Related Questions