![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| roofless |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.10.2011 Где: г. Владимир Репутация: нет Всего: нет |
Даны два связных списка. Проверить, может ли быть получен второй список в результате циклического сдвига элементов первого списка. Кое-что набросал, но не понимаю, как далее работать с этими списками, хотя бы просто сравнить элементы. Заранее спасибо =)
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Уже есть готовый LinkedList<T> с полным функционалом.
Если нужен твой список, нужно добавить в него метод определения длины списка и итератора. Простейший итератор - указатель на текущий Item + указатель на голову списка. 1.Если длины списков не совпадают, возвращаем false; 2.Устанавливаем итераторы ориг1 и ориг2 в начала списков список1 и список2; 3.Делаем копии копия1 и копия2 итераторов ориг1 и ориг2; 4.Сравниваем элементы копии1 и копии2 до конца списка1, при достижении конца списка2 делаем заворот в начало; 5.Если все элементы совпали, возвращаем true; 6.Продвигаем итератор ориг2 на следующий элемент; если не достигли конца списка, переход на 3; 7. Возвращаем false; |
|||
|
||||
| roofless |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 26.10.2011 Где: г. Владимир Репутация: нет Всего: нет |
Начал с малого. Немного переделал, добавил итератор. Получилось вот что:
И код итератора:
Как теперь реализовать проверку, может ли быть получен второй список в результате циклического сдвига элементов первого списка (т.е. сравнение эл-тов списков с циклическим сдвигом)? Это сообщение отредактировал(а) roofless - 27.10.2011, 16:01 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Методы listSize1 и listSize2 дублирутся, нужна одна listSize.
При создании итератора нужно запоминать начало списка и иметь метод rewind() для повторного просмотра.
Можно для наглядности создавать циклически сдвинутую копию и сравнивать циклически сдвинутый список со вторым, но это лишние действия. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |