将堆栈传递给函数
Posted
技术标签:
【中文标题】将堆栈传递给函数【英文标题】:Passing Stack to a function 【发布时间】:2021-12-30 22:21:39 【问题描述】:我正在尝试解决有关hackerrank 的问题。但我每次都收到emptyStack 异常。我认为这可能是因为我将堆栈传递给getMax 函数并且它正在更改原始堆栈. 我试图在 getMax 中写这个,希望它不会影响最终堆栈,但它没有工作。
Stack<Integer> s=st;
你能指出并解释我犯的错误吗?
对于某些测试用例,该程序运行得非常好。(0,2,27)
问题链接:https://www.hackerrank.com/challenges/maximum-element/copy-from/243724938
我的解决方案:
import java.util.*;
class Solution
static void getMax(Stack<Integer> st)
Stack<Integer> s=st;
int max=s.peek();
s.pop();
while(!s.empty())
if(s.peek()>max)
max=s.peek();
s.pop();
System.out.println(max);
public static void main(String args[])
Stack<Integer> s=new Stack<Integer>();
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
while(n-->0)
int c=sc.nextInt();
if(c==1)
s.push(sc.nextInt());
else if(c==2)
s.pop();
else
getMax(s);
【问题讨论】:
请edit 发帖并正确格式化您的代码。 --- "Stack<Integer> s=st;
" - 你觉得这行代码是什么?
【参考方案1】:
但我每次都收到 emptyStack 异常。
因为当你执行stack.pop
时,堆栈已经是空的了。
在你的getMax
方法中,Stack<Integer> s=st
这个操作不会复制栈,也就是说st
和s
引用的是同一个对象,所以你后续的操作会影响到原来的栈。
将Stack<Integer> s=st;
更改为Stack<Integer> s= (Stack<Integer>) st.clone();
。
【讨论】:
以上是关于将堆栈传递给函数的主要内容,如果未能解决你的问题,请参考以下文章