Поскольку вы сказали, что хотите найти проблему самостоятельно, я просто дам вам подсказку вместо решения.
Ваша функция reverse
работает в том смысле, что она успешно переворачивает список. Это не проблема. Вероятно, у вас есть 2 звонка на print
. Один до и один после реверса. Что вы заметили в отношении узлов, передаваемых print
в обоих случаях? О чем тебе это говорит?
РЕДАКТИРОВАТЬ:
Поскольку вы сказали, что нашли проблему, я опубликую фактическое решение.
В вашем коде reverse
вы никогда не обновляете _head
списка, но когда вы reverse
списка, заголовок действительно меняется с 4
на 1
. Поскольку вы никогда не обновляете _head
, когда вы вызываете print
во второй раз (после вызова reverse
), вы начинаете печатать с 1
, это конец списка, это единственный напечатанный узел.
Решение состоит в том, чтобы обновить _head
, когда вы переворачиваете список. Самый простой способ сделать это — просто обновлять его на каждой итерации. Это может быть немного менее эффективным, чем другие возможные решения, но это не меняет временную сложность алгоритма - это все еще O (n):
void LinkedList::reverseList()
{
Node *next=_head;
Node *prev=0;
while(next!=0)
{
Node *tmp=next->_next;
next->_next=prev;
_head = next;
prev=next;
next=tmp;
}
}
person
John Dibling
schedule
23.10.2012
_head
, не так ли? - person Xeo   schedule 23.10.2012_head = prev;
после циклаwhile
. - person Anton Guryanov   schedule 23.10.2012_head = prev
после циклаwhile
, ваш код будет полностью идентичен моему ответу здесь. Я также попробовал и проверил его на LWS. - person Xeo   schedule 23.10.2012