Печать элементов путем удаления среднего элемента стека

Входные данные: первая строка входных данных содержит единственное целое число 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();
    }
  }
}

Как поступить со средним элементом, если количество элементов четное?

Pushpesh Kumar Rajwanshi 09.11.2018 10:37

для этой ситуации я проверю, является ли n четным или нечетным, и если оно четное, то я удалю позицию (n / 2) -1 в соответствии с тестовым примером. для eg-n = 6 и element is 1 2 3 4 5 6 тогда мой результат будет 6 5 4 2 1

Ravi 09.11.2018 10:52

любезно скажите мне логику удаления среднего элемента для нечетного количества элементов

Ravi 09.11.2018 10:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
1 522
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Не вставляйте средний элемент входного массива.

получить индекс среднего элемента:

 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);
       }
    

Другие вопросы по теме