печать элементов путем удаления среднего элемента стека - PullRequest
0 голосов
/ 09 ноября 2018

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

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы можете сделать это с помощью метода pop() popping возвращает и удаляет верхний элемент стека, чтобы вы могли создавать и заполнять новый стек в обратном порядке, не нужно переворачивать итератор, посмотрите по коду ниже.

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 голосов
/ 09 ноября 2018

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

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

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

Все остальное выглядит хорошо. Просто убедитесь, что предоставили значимые имена для переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...