# Implement Stack With Linked List

Posted: 28 Jul, 2020
Difficulty: Moderate

## PROBLEM STATEMENT

#### Create a class named 'Stack' which supports the following operations(all in O(1) time):

``````getSize: Returns an integer. Gets the current size of the stack

isEmpty: Returns a boolean. Gets whether the stack is empty

push: Returns nothing. Accepts an integer. Puts that integer at the top of the stack

pop: Returns nothing. Removes the top element of the stack. Does nothing if the stack is empty.

getTop: Returns an integer. Gets the top element of the stack. Returns -1 if the stack is empty
``````

#### Input format:

``````The first line of the input will contain the number of queries, 'T'.
The next 'T' lines will contain the queries. They can be of the following five types:

'1': Print the current size of the stack

'2': Find whether the stack is empty. Print "true" if yes, "false" otherwise

'3': This query will be given like "3 val" where val can be any non-negative integer. Put val on the top of the stack. Print nothing

'4': Remove the top element of the stack. Print nothing

'5': Print the top element of the stack. If the stack is empty, print -1
``````

#### Output format:

``````For each test case, print the result of each query on a separate line. If the query is '3' or '4', print nothing (not even an empty line)

The output of each test case will be printed in a separate line.
``````

#### Note:

``````You do not need to print anything, it has already been taken care of. Just implement the given function.
``````
##### Constraints:
``````1 <= T <= 10^6
1 <= Q <= 5
1 <= Data <= 2^31 - 1

Where 'Q' is the type of query and 'Data' being the values getting pushed and popped from the stack.

Time Limit: 1sec
`````` Approach 1
1. Maintain a linked list. Keep track of its head, and size at all times, and update them accordingly whenever a new operation is performed.
2. Following is the way we can implement all functions of the stack using linked list:
1. First, initialize a head node, and the size of the list as NULL and 0 respectively.
2. Then for push function, insert new elements at the head of the list, i.e. the new element will become the new head of the list and the previous head will become the next of new head. Also, increase the size by 1.
3. For pop, just move the head to its next and delete the original head(if required). Also, decrease the size by 1. If the head was null or None (i,e, the list is empty), do nothing.
4. For getTop, simply return the head’s data or -1 if the list is empty.
5. For getSize, simply return the size of the list
6. For isEmpty, return true if the size is 0, otherwise, return false