Problem of the day
You must implement the Stack data structure using a Singly Linked List.
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. It 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, 'q'.
The next 'q' 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, and "false" otherwise.
'3': This query will be 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:
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.
4
3 5
3 4
1
2
2
false
The first two queries ('3') push 5 and 4 on the stack. So the size of the stack becomes 2.
Therefore the third query ('1') prints the size, and since the stack is not empty, the fourth and final query ('2') outputs "false"
4
3 5
3 4
4
5
5
The first two queries ('3') push 5 and 4 on the stack.
The third query ('4') removes the top element of the stack, which is 4.
The fourth and final query ('5') prints the top element of the stack, 5
1 <= q <= 10^6
1 <= type <= 5
1 <= Data <= 2^31 - 1
Where 'type' is the type of query and 'Data' is the values getting pushed and popped from the stack.
Time Limit: 1sec
Usually, insertion/deletion from a linked list takes O(n) time. But that happens because we insert/elements anywhere from the head to the tail. What if we only do those operations at the head?
O(1)
Since we are inserting and deleting elements from the head of the list itself, constant time is spent on pop and push functions. The other functions are also simply returning a value, so they also take constant time.
O(N) where ‘N’ is the number of elements pushed in the stack.
We can add a maximum of ‘N’ elements in the stack.