Question
You need to implement a stack using singly linked list so that POP and PUSH takes O(1) similar performance of an array. How would you do that?
Concept
We know about LIFO in a stack. We have to just maintain the element added to the linked list at the top. Then you will get a PUSH at the top with O(1) and POP at the top with O(1).
Code
class StackList {    struct ListNode {        int data;ListNode* next;
};
ListNode *head;
public:    StackList() : head(NULL) {}void push(int data);
    int pop();};
void StackList::push(int data)
{    ListNode* n = new ListNode;n->data = data;
n->next = head;
head = n;
}
int StackList::pop(){    if(head == NULL)        return -1;    int tdata = head->data;ListNode* next = head->next;
free(head);
head = next;
    return tdata;}
void main(){StackList obj;
obj.push(5);
obj.push(3);
obj.push(2);
obj.push(10);
cout<<obj.pop();
}
- Add elements to the head node
 - Remove elements also from the head node
 
1 comment:
loved the O(1) push !
Post a Comment