Enunciados de questões e informações de concursos
O método concat(s1,s2) recebe duas pilhas como parâmetros e retorna a concatenação de s1 com s2. Por exemplo, suponha que as pilhas abaixo sejam passadas para concat():
O método concat() irá produzir uma pilha na qual o elemento que estará no seu topo será o topo da pilha s1. Além disso, o elemento no topo de s2 ficará imediatamente abaixo da base de s1. A Figura a seguir exibe a pilha produzida pelo método concat() a partir das pilhas s1 e s2:
Qual implementação do método concat() produz o resultado descrito acima?
public Stack<Integer> concat(Stack<Integer> s1,Stack<Integer> s2)
{
for( ;!s1.empty();s2.push(s1.pop()));
return s2;
}
public Stack<Integer> concat(Stack<Integer> s1,Stack<Integer> s2)
{
Stack<Integer> nova=new Stack<Integer>();
ArrayList<Integer> aux=new ArrayList<Integer>();
for( ;!s1.empty();aux.add(s1.pop()));
for( ;!s2.empty();aux.add(s2.pop()));
for(int i=0;i<aux.size();i++)
nova.push(aux.get(i));
return nova;
}
public Stack<Integer> concat(Stack<Integer> s1,Stack<Integer> s2)
{
Integer i;
if(s1.empty())
return s2;
i=s1.pop();
concat(s1,s2);
s2.push(i);
return s2;
}
public Stack<Integer> concat(Stack<Integer> s1,Stack<Integer> s2)
{
Integer i=null,j=null;
Stack<Integer> nova=new Stack<Integer>();
if(s1.empty() && s2.empty())
return s2;
if(!s1.empty())
i=s1.pop();
if(!s2.empty())
j=s2.pop();
concat(s1,s2);
if(i!=null)
nova.push(i);
if(j!=null)
nova.push(j);
return nova;
}