-1

In Java, how to delete element from the bottom of the stack? Should I use a temporary stack and pop every element into it to reverse the stack and then pop the first element or would treating it as a list would be easier? I am trying to delete first n/2 elements from the bottom of the stack where n is the number of element in the stack. here I am taking only Integer values.

Arvind Kumar Avinash
  • 71,965
  • 6
  • 74
  • 110
Anish Raj
  • 5
  • 1
  • 6

3 Answers3

0

You can use Deque in java. It supports both insertion and deletion on both sides. e.g.

Deque<Integer> deque = new ArrayDeque<>(Arrays.asList(1,2,3,4));
int count = deque.size() / 2;
while (count > 0)
{
  deque.removeLast();
  count--;
}

You can use linkedList as implementation of Deque instead. The difference between LinkedList and ArrayDeque: https://stackoverflow.com/questions/6163166/why-is-arraydeque-better-than-linkedlist#:~:text=Key%20differences%3A,LinkedList%20but%20not%20in%20ArrayDeque&text=The%20LinkedList%20implementation%20consumes%20more%20memory%20than%20the%20ArrayDeque

More details at https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html

0

Based on your described use case, I think you need a different data structure.

I would recommend you to review the double-ended queue, or Deque, which has been part of the Java Collections API since Java 1.6.

This data structure is a bit of a hybrid between a Stack and a Queue, permitting you to add/remove elements to/from either end.

You can perform the traditional Stack operations of push and pop using addFirst and removeFirst, respectively.

To remove from the tail - or 'bottom' of the 'Stack', as you put it - you can use removeLast.

The size method will give you the number of elements.

Philip Wrage
  • 1,505
  • 1
  • 12
  • 23
0

I understand your problem and easiest solution for this is to use remove(int i) function. This takes int as a parameter,

Stack<Integer> = new Stack<>();
//suppose stack is [1,2,3,4,5,6,7,8]

First use size() to get stack size. To delete first n/2 elements -

int size = (int) Math.floor(stack.size()/2)

Now, run a loop from 0 to size Be carefull always delete first element as every time stack gets updated

for(int i = 0; i<size ; i++) {
 stack.remove(0); 
}

Print the remaining stack

System.out.println(stack) //[5,6,7,8]

I hope this solves your doubt.