Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2013, 14:41   #11
leonid_v
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 10
По умолчанию

можно. но хвоста то нет есть кольцо
leonid_v вне форума Ответить с цитированием
Старый 23.01.2013, 14:47   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

какая занимательная задачка-головоломка! супер!

leonid_v, а скажите, можно ли предположить, что в списке не более чем X элементов (ну. например, в списке не более 1000 элементов (или 10000 или миллион - не суть важно)). Исходя из этого условия можно найти элемент, на который идёт зацикливание и далее уже задача решается элементарно!



кстати, а почему имя файла на иврите?

Последний раз редактировалось Serge_Bliznykov; 23.01.2013 в 14:52.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2013, 14:54   #13
leonid_v
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 10
По умолчанию

нет.в задаче не сказано
leonid_v вне форума Ответить с цитированием
Старый 23.01.2013, 15:13   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тогда как вам такое решение.
предположим, что в списке K элементов (K-й элемент == концевому).
тогда конецевой элемент должен ссылаться на один иэ элементов, расположенный на протяжении от головы и до элемента K
так же предположим, что, сначала, K=1
проверим это предположение, если это не так, увеличим K на единицу и опять проверим. будем повторять до тех пор, пока условие не выполнится.
профит.

на псевдокоде это будет примерно так
Код:
  K := 1;
  начало цикла
     перебирая элементы от head найти K-й элемент списка.
     запомнить его в pEnd;
     перебирая элементы от head до K 
        сравнивать каждый элемент с pEnd^.Next 
                (if на него ссылается последний элемент),  тогда признак_готово :=  true) 
     если не признак_готово, тогда увеличить K на 1
повторять цикл до тех пор, пока не станет признак_готово
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2013, 15:15   #15
leonid_v
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 10
По умолчанию

в условии сказано что время работы O(n) а это подразумевает нет цикла в цикле
leonid_v вне форума Ответить с цитированием
Старый 23.01.2013, 15:20   #16
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

сохрани адрес первого элемента и беги пока он снова не встретится. Профит!
int fa = &l->first();
int count = 0;
do
{
count++;
}while(&l->next() != fa)

ну как нить так.
Если кольцо замыкается на первом элементе канешн.
Реализацию списка надо для начала увидеть, чтобы судить что к чему.
Помог? Оставляем отзыв =)

Последний раз редактировалось Helloween; 23.01.2013 в 15:24.
Helloween вне форума Ответить с цитированием
Старый 23.01.2013, 15:28   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Helloween, а вы иллюстрацию не смотрели?

позволю её продублировать:


ссылка идёт НЕ на первый элемент списка!

Цитата:
в условии сказано что время работы O(n) а это подразумевает нет цикла в цикле
ну да. в моём решении это условие явно не выполняется!
я в расстерянности...



.
Изображения
Тип файла: jpg ListIllus.jpg (4.6 Кб, 65 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2013, 15:29   #18
leonid_v
Пользователь
 
Регистрация: 23.01.2013
Сообщений: 10
По умолчанию

я в расстерянности...:confuse d:
leonid_v вне форума Ответить с цитированием
Старый 23.01.2013, 15:34   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

скажу сейчас одну крамольную вещь...
только просьба помидорами не кидаться!

у каждого элемента в списке есть адрес (указатель). Если предположить, что элементы выделялись последовательно, то у лежащих правее элементов адрес (указатель) имеет большее значение, чем у тех элементов списка, что лежат левее.
улавливаете, к чему это я?
если указатель на следующий элемент больше, чем адрес самого элемента, значит этот элемент НЕ КОНЦЕВОЙ.


p.s. на самом деле, я бы категорически не рекомендовал использовать подобные "трюки" в реальной задаче - ибо это всё хакерсто, глюкодром и вообще КРАЙНЕ не надёжно!!!
просто я не вижу других вариантов решения задачи
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2013, 15:42   #20
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но хвоста то нет есть кольцо
Как это нет?
При добавлении в список можно проделать проход от добавленного элемента до конца списка или до элемента, равному добавленному. Так можно понять что на этом элементе петля.
Код:
Добавили элемент
Элемент = новый элемент
пока элемент.следующее не нуль или элемент не равен новый элемент
 элемент равен следующему
конец цикла
Если Элемент.следующее не равен нулю То это элемент петли
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связанный список Лжец Общие вопросы C/C++ 2 12.12.2011 23:42
Связанный список на СИ maryan.vetrov Общие вопросы C/C++ 6 18.10.2010 08:49
Связанный список (Linked list). lnter Помощь студентам 0 12.04.2010 17:58
База данных. Связанный список. 4uJIaBekTonop C/C++ Базы данных 3 29.12.2009 10:42