Return the stack element at a given index without

2019-08-31 09:40发布

Ok I was recently asked this in an interview, and I am intrigued. Basically I have a stack with a certain set of values, I want to pass the stack object in a function and return the value at certain index. The catch here is that after the function is complete, I need the stack unmodified; which is tricky because Java passes reference by value for objects. I am curious if there is purely a java way to do using push(), pop(), peek(), isempty() and primitive data type. I am against copying the elements into an array or string. Currently the cleanest I have got is using clone, find the code below:

    import java.util.Stack;


public class helloWorld {

public int getStackElement( Stack<Integer> stack, int index ){
    int foundValue=null;//save the value that needs to be returned
    int position=0; //counter to match the index
    Stack<Integer> altStack = (Stack<Integer>) stack.clone();//the clone of the original stack
    while(position<index)
    {
        System.out.println(altStack.pop());
        position++;
    }
    foundValue=altStack.peek();
    return foundValue;
}

    public static void main(String args[]){
        Stack<Integer> stack = new Stack<Integer>();
        stack.push(10);
        stack.push(20);
        stack.push(30);
        stack.push(40);
        stack.push(50);
        stack.push(60);
        helloWorld obj= new helloWorld();
            System.out.println("value is-"+obj.getStackElement(stack,4));
        System.out.println("stack is "+stack);

    }

}

I understand that cloning is also copying, but that's the basic flaw I am aiming to remove. Stripped down I am asking if I would be actually be able to pass the stack's value instead of passing the value of its reference.

Thanks in advance.

2条回答
【Aperson】
2楼-- · 2019-08-31 09:53

If you cannot use another stack, you can cheat and abuse a local variable on the call stack for the same purpose by making a recursive method:

public static <T> T getStackElement(Stack<T> stack, int index) {
  if (index == 0) {
    return stack.peek();
  }

  T x = stack.pop();
  try {
    return getStackElement(stack, index - 1);
  } finally {
    stack.push(x);
  }
}
查看更多
来,给爷笑一个
3楼-- · 2019-08-31 09:54
int position =5;

Integer result = stack.get(position);

Java Doc here

查看更多
登录 后发表回答