Входные данные: первая строка входных данных содержит единственное целое число T, обозначающее количество тестовых примеров. Далее следует T тестовых примеров, первая строка каждого тестового примера содержит целое число n. Вторая строка состоит из n целых чисел через интервалы.
Вывод: вывести элементы стопки после удаления среднего элемента в обратном порядке.
Ввод: 1
7
1 2 3 4 5 6 7
вывод:
7 6 5 3 2 1
на самом деле я могу печатать в обратном порядке, но я не знаю, как удалить средний элемент из стека. пожалуйста, помогите
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
{
public static void main (String[] args)
{
Scanner s=new Scanner(System.in);
int test=s.nextInt();
for(int t=0;t<test;t++)
{
int n=s.nextInt();
int a[]=new int[n];
for(int i=0;i<n;i++)
a[i]=s.nextInt();
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<n;i++)
{
stack.push(a[i]);
}
ListIterator<Integer> lstIterator=stack.listIterator(stack.size());
while(lstIterator.hasPrevious())
{
Integer res=lstIterator.previous();
//what condition should i give so that it would print all the
elements except middle one.
System.out.print(res+" ");
}
System.out.println();
}
}
}
для этой ситуации я проверю, является ли n четным или нечетным, и если оно четное, то я удалю позицию (n / 2) -1 в соответствии с тестовым примером. для eg-n = 6 и element is 1 2 3 4 5 6 тогда мой результат будет 6 5 4 2 1
любезно скажите мне логику удаления среднего элемента для нечетного количества элементов




Не вставляйте средний элемент входного массива.
получить индекс среднего элемента:
int middle = a.length/2;
не вставляйте средний элемент в стек:
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<n;i++){
if (i != middle)
stack.push(a[i]);
}
В остальном все нормально. Просто убедитесь, что вы указали значимые имена для переменных.
Вы можете сделать это с помощью метода pop(), который возвращает и удаляет верхний элемент стека, чтобы вы могли создать и заполнить новый стек в обратном порядке, не нужно менять итератор, посмотрите на приведенный ниже код.
import java.util.ListIterator;
import java.util.Scanner;
import java.util.Stack;
class GFG {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//Define stacks here
Stack<Integer> stack = new Stack<Integer>();
Stack<Integer> new_stack = new Stack<Integer>();
int test = s.nextInt();
for (int t = 0; t < test; t++) {
int n = s.nextInt();
int a[] = new int[n];
double middle = Math.ceil((double) n / 2);
System.out.println("Middle is : " + middle);
for (int i = 0; i < n; i++) {
a[i] = s.nextInt();
}
// add elements to stack
for (int i = 0; i < n; i++) {
stack.push(a[i]);
}
//popping the elements of stack
for (int j = 0; j < n; j++) {
Integer element = stack.pop();
if (j != middle -1) {
new_stack.push(element);
}
}
ListIterator<Integer> lstIterator = new_stack.listIterator(stack.size());
while (lstIterator.hasNext()) {
Integer res = lstIterator.next();
//what condition should i give so that it would print all the elements except middle one.
System.out.print(res + " ");
}
System.out.println();
}
}
}
Вы можете просто использовать рекурсию для удаления среднего элемента стека.
ток = 0
mid = stack.size () / 2
static void delete(Stack<Integer> stack, int current, int mid){
if (stack.isEmpty())
return;
if (current == mid){
stack.pop();
return;
}
int x = stack.pop();
current++;
delete(stack, current, mid);
stack.push(x);
}
Как поступить со средним элементом, если количество элементов четное?