![]() |
|
![]() ![]() ![]() |
|
Fardon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.12.2009 Репутация: нет Всего: нет |
Всем добрый день.
Препод по программированию задал задачку. Что-то никак не соображу, как решается. Задача по Динамическим структурам данных, по паскалю в частности. Хотя жёстко к языку не привязана. Так что интересует алгоритм решения а не реализация . Вообще задача вроде как стандартная и видел много вопросов по ней. Но вот решения, которое подходит мне не нашёл. Есть однонаправленный список, который может быть зациклен Задание такое – определить зацикленный ли список? Данные и условия: ![]() Список может быть зациклен не только на предыдущий элемент. Т.е решение запустить 2 прохода по списку с разным шагом в 2 не подходит. Перезаписывать, добавлять что-либо в самом списке нельзя. Т.е добавить флаг-" здесь мы были" нельзя. Создавать переменные, которые зависят от количества элементов в цикле нельзя. Т.е создать ещё список с пройденными адресами нельзя. Количество элементов списка (N) неизвестно. И максимальное количество проходов по списку, за которое точно можно будет сказать, что список не зациклен (или зациклен), не должно превышать N. Т.е тупой поиск в пройденных элементах использовать нельзя. Вродь всё) Я уже и не знаю что делать. Мож что-нить связанное с указателями и памятью тут? Помогите пожалуйста) |
|||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
А перед циклом сохранить указатель на текущий элемент списка нельзя?
Добавлено через 1 минуту и 5 секунд Имею ввиду это:
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
делаем два итератора по списку
в цикле один сдвигаем на один элемент, второй - на два работаем, пока не дойдём до конца или не обнаружим, что оба итератора указывают на один и тот же элемент расстояние между ними на каждом шаге увеличивается на 1, так что, когда номер шага кратен периоду, итераторы будут указывать на один и тот же элемент (если список зациклен) начальная нециклическая часть может привести к тому, что первый период будет пропущен, но рано или поздно оба итератора войдут в циклическую часть, а после этого сравняются на первом же шаге с номером кратным периоду -------------------- qqq |
|||
|
||||
Fardon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 6.12.2009 Репутация: нет Всего: нет |
Спасибо! ![]() немного не додумал) теперь кажется так легко ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |