将堆栈传递给函数

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&lt;Integer&gt; s=st;" - 你觉得这行代码是什么? 【参考方案1】:

但我每次都收到 emptyStack 异常。

因为当你执行stack.pop时,堆栈已经是空的了。

在你的getMax方法中,Stack&lt;Integer&gt; s=st这个操作不会复制栈,也就是说sts引用的是同一个对象,所以你后续的操作会影响到原来的栈。

Stack&lt;Integer&gt; s=st; 更改为Stack&lt;Integer&gt; s= (Stack&lt;Integer&gt;) st.clone();

【讨论】:

以上是关于将堆栈传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将内部回调的结果传递给其父函数? [复制]

将指向局部变量的指针传递给函数:它安全吗?

将数组和数组指针传递给C中的函数之间的区别

哨兵与传递计数

为什么在C#中,引用型参数是隐式传递给函数的?

将空列表传递给函数以收集结果