Как вывести список в обратном порядке java
Перейти к содержимому

Как вывести список в обратном порядке java

  • автор:

Как вывести список в обратном порядке java

Выведите односвязный список из предыдущего задания Вывод односвязного списка в обратном порядке.

Сделайте два решения: с использованием цикла и через рекурсию.

С использованием рекурсии

С использованием рекурсии

Рекурсивная логика в этом случае немного сложнее.

Сначала надо вывести оставшуюся часть списка, а затем текущий элемент:

let list = < value: 1, next: < value: 2, next: < value: 3, next: < value: 4, next: null >> > >; function printReverseList(list) < if (list.next) < printReverseList(list.next); >alert(list.value); > printReverseList(list);

С использованием цикла

С использованием цикла

Вариант с использованием цикла сложнее, чем в предыдущей задаче.

Нет способа сразу получить последнее значение в списке list . Мы также не можем «вернуться назад», к предыдущему элементу списка.

Поэтому мы можем сначала перебрать элементы в прямом порядке и запомнить их в массиве, а затем вывести то, что мы запомнили, в обратном порядке:

let list = < value: 1, next: < value: 2, next: < value: 3, next: < value: 4, next: null >> > >; function printReverseList(list) < let arr = []; let tmp = list; while (tmp) < arr.push(tmp.value); tmp = tmp.next; >for (let i = arr.length - 1; i >= 0; i--) < alert( arr[i] ); >> printReverseList(list);

Обратите внимание, что рекурсивное решение на самом деле делает то же самое: проходит список, запоминает элементы в цепочке вложенных вызовов (в контексте выполнения), а затем выводит их.

Roman82 / Слова в обратном порядке Введи с клавиатуры 5 слов в список строк.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

package com.javarush.test.level07.lesson09.task02;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
/* Слова в обратном порядке
Введи с клавиатуры 5 слов в список строк. Удали 3 — ий элемент списка, и выведи оставшиеся элементы в обратном порядке.
*/
public class Solution
public static void main(String[] args) throws Exception
//напишите тут ваш код
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); ArrayList list = new ArrayList();
for(int i = 0; i < 5; i++)
list.add(reader.readLine());
>
list.remove(2);
for (int i = list.size()-1; i >= 0; i—)
System.out.println(list.get(i));
>
>
>

LinkedList Вывод в обратном порядке

Задан связный список. Выведите его элементы в обратном порядке.

Определение связного списка:

// Java class ListNode < int val; ListNode next; ListNode(int x) < val = x; next = null; >> 
// C++ class ListNode < public: int val; ListNode *next; ListNode(int x) : val(x), next(NULL) <>>; 

Реализуйте функцию PrintReverse , которая выводит элементы связного списка в обратном порядке.

// Java void PrintReverse(ListNode head) 
// C++ void PrintReverse(ListNode *head) 
Пример

Функция PrintReverse выведет в одной строке элементы списка в обратном порядке: 3 2 1 .

Как поменять элементы массива в обратном порядке в Java

Напишите программу, которая меняет местами элементы одномерного массива из String в обратном порядке. Не используйте дополнительный массив для хранения результатов.

Решение:

Princeton_2.1
public class Test < public static void main ( String [ ] args ) < String [ ] a = < "Каждый " , " охотник " , " желает " , " знать " , " где " , " сидит " , " фазан " >;
//Выводим изначальный массив в консоль
for ( int i = 0 ; i < a . length ; i ++ ) < System . out . print ( a [ i ] ) ; System . out . println ( ) ; int n = a . length ; //Переменная, которая будет использоваться при обмене элементов String temp ; for ( int i = 0 ; i < n / 2 ; i ++ ) < temp = a [ n - i - 1 ] ; a [ n - i - 1 ] = a [ i ] ; a [ i ] = temp ; //Выводим конечный массив в консоль for ( int i = 0 ; i < a . length ; i ++ ) < System . out . print ( a [ i ] ) ;

Комментарии к задаче:

В результате выполнения этого кода получим перевернутый массив: вместо «Каждый охотник желает знать где сидит фазан» — «фазан сидит где знать желает охотник Каждый «

Как была решена задача? Основная ее часть — это фрагмент:

int n = a . length ;
String temp ;
for ( int i = 0 ; i < n / 2 ; i ++ ) < temp = a [ n - i - 1 ] ; a [ n - i - 1 ] = a [ i ] ; a [ i ] = temp ;

Он по очереди меняет местами противоположные элементы массива, используя как посредника дополнительную переменную String temp (temp — от temporary, «временный»). Можно было бы обойтись и без нее, если бы массив хранил переменные числового типа.

Тут есть a[i] и малопонятное a[n-i-1]. Но на самом деле n-i-1 это просто формула для определения «противоположного» элемента массива:

task2_arr_prince

Если бы мы имели массив, который бы состоял из элементов a, b, c, d, e и f, то есть массив из 6 элементов (n=6), «противоположным» (то есть элементом a[n-i-1]) для каждого из них были бы f для a, e для b и d для c. Цикл из фрагмента кода выполнялся бы три раза, до элемента d (i=0, 1, 2). Граница выполнения массива показана оранжевой линией на рисунке.

Так, обратите внимание, что мы не должны проходить циклом весь массив, чтобы поменять его элементы местами.

Надеемся — наша статья была Вам полезна. Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.

  • ← Java 8 Stream Files
  • Раздача карт в покере в Java →

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *