Search code examples
clinked-liststack

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?


Solution

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