Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 29.09.2014
Сообщений: 24
1

Рекурсивное создание однонаправленного списка з хвоста

29.09.2014, 22:39. Показов 2942. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Прошу помощи в решении задачи, я себе уже мозг сломал но не получается.
И так условие, дан вот такой "строительный элемент":
Java
1
2
3
4
5
6
7
8
9
10
public class Node {
 
    public int value;
    public Node next;
 
    public Node(int value, Node next) {
        this.value = value;
        this.next = next;
    }
}
Нужно используя его создать рекурсивно однонаправленный список начиная с хвоста.
Итеративно сделал, а вот с рекурсией траблы...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2014, 22:39
Ответы с готовыми решениями:

Рекурсивное создание двусвязного списка
Как рекурсивно создать двусвязный список, например со значениями от 0 до max? На примере...

Создание однонаправленного списка, вывод на экран, добавление и удаление элементов
Write a program that creates a singly linked list consisting of positive and negative integers,...

Создание однонаправленного списка
//создание однонаправленного списка (добавления в конец) ре- курсивным методом на языке Си ...

Создание однонаправленного списка
Запишите все необходимые объявления (типов и переменных) для создания в программе на языке C++...

7
Эксперт 1С
843 / 606 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
29.09.2014, 23:31 2
Данный класс уже является рекурсивным однонаправленным списком.
Что нужно сделать то? Создать какой-нибудь список с конкретными элементами?

Добавлено через 6 минут
Вот функция отображения массива в список:
Java
1
2
3
4
5
6
7
8
public static Node listFromArray(int[] array) {
    Node next;
    next = null;
    for (int i = array.length - 1; i >= 0; i--) {
        next = new Node(array[i], next);
    }
    return next;
}
0
4 / 4 / 1
Регистрация: 29.09.2014
Сообщений: 24
29.09.2014, 23:58  [ТС] 3
Прошу прощения, немного не точно указал условие, вы все верно говорите, структура класса действительно соответствует однонаправленному списку. Конкретнее, нужно создать функцию генерации списка условно function(int value), где value - количество элементов(Node) в списке, значение первого елеметна("головы") = null
Пример который вы указали - это итеративное создание списка с "головы", а мне нужно рекурсивное с "хвоста".
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.09.2014, 00:45 4
Что-то типа такого

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Solution {
    public static void main(String[] args) {
        
        Node root = createNote(5);
        
        System.out.println("Node: " + root);
    }
 
    private static Node createNote(int len) {
        if(len == 0) {
            return null;
        }
        Node n = new Node((int)(Math.random()*10), createNote(len-1));
        return n;
    }
}
0
4 / 4 / 1
Регистрация: 29.09.2014
Сообщений: 24
30.09.2014, 01:24  [ТС] 5
Если заменить для лучшей наглядности (int)(Math.random()*10) на len - 1 , то получится, что сначала создастся элемент с значением null, затем с value =1, потом 2, 3 и т.д., то есть список начнется с "головы"(null), а нужно с "хвоста"(len).
То что вы написали, я сделал почти также:
Java
1
2
3
4
5
6
7
public static Node generarationRecurHead(int value) {
        if (value > 0) {
            return new Node(value - 1, generarationRecurHead(value - 1));
        } else {
            return null;
        }
    }
Есть решение которое мне нужно с помощью цикла, вот:
Java
1
2
3
4
5
6
7
8
9
private static Node generationIterTail(int value) {
        Node tail = new Node(value - 1, null);
        Node head = tail;
        for (int i = value - 1; i > 0; i--) {
            head.next = new Node(i - 1, null);
            head = head.next;
        }
        return tail;
    }
нужно такое же только через рекурсию
0
Эксперт Java
2398 / 2223 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
30.09.2014, 10:23 6
JavaManProg, тогда вот так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Solution {
    public static void main(String[] args) {
        
        Node root = createNote(new Node(5, null), 5);
        
        System.out.println("Node: " + root);
    }
 
    private static Node createNote(Node node, int value) {
        if(value == 0) {
            return null;
        }
        node.next = createNote(new Node(value-1, null), value-1);
        return node;
    }
}
0
4 / 4 / 1
Регистрация: 29.09.2014
Сообщений: 24
30.09.2014, 12:08  [ТС] 7
Спасибо, это оно! Никак не мог сообразить куда приткнуть инициализацию "хвоста" в рекурсивном исполнении, а оказывается ее нужно было сделать параметром рекурсивного метода
Я немного еще сократил и получилось вообще красиво:
Java
1
2
3
4
5
6
public static Node generalRecurTail(Node node) {
        if (node.value > 0) {
            node.next = generalRecurTail(new Node(node.value - 1, null ));
        }
        return node;
    }
Еще раз большое списибо!
0
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 4
07.06.2016, 16:22 8
О, спасибо за тему
0
07.06.2016, 16:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2016, 16:22
Помогаю со студенческими работами здесь

Создание линейного однонаправленного списка
Добрый вечер!Написала программу создания линейного списка и вывод его на экран с клавиатуры и из...

Создание линейного однонаправленного списка
Создать линейный однонаправленный список из целых чисел. Удалить из списка первый элемент со...

Создание кольцевого однонаправленного списка
Можно ли исправить функцию, чтобы создание происходило сразу всего списка как массива, не вводя...

Создание линейного однонаправленного списка
Здравствуйте. Суть проблемы: В файле имеются исходные данные - список фамилий и телефонов,...

Создание однонаправленного списка с добавлением элементов в конец. Pascal
Помогите, пожалуйста Не могу понять, почему работает некорректно Procedure Create(var...

Создание связанного однонаправленного списка, содержащего целые числа в поле данных
Всем доброго времени суток. И так в общем вроде все понятно. // Реализуем список struct...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru