2013-09-30 3 views
-1

Я пытаюсь перегрузить operator-- в односвязном списке.Operator-- в объединенном списке

У меня есть класс узла с: T Информация NODETYPE * ссылка

итератора класса (который является другом односвязанны список) с: NODETYPE * первый NODETYPE * тока BOOL offTheEdge

односвязанны класс Список с: * первая * последняя

Я успешно модифицировал метод оператора ++ и я передаю все тесты. Код выглядит следующим образом:

if(offTheEdge == true) 
{ 
    return *this; 
} 
else 
{ 
    if(current->link == NULL) 
    { 
     offTheEdge = true; 
     return *this; 
    } 
    else 
    { 
     current = current->link; 
    } 
} 

return *this; 

Мои инструкции являются следующие: же, как оператор ++, но идет в обратном направлении. Переход назад в односвязном списке означает, что вам нужно начинать с начала и идентифицировать узел, где находится этот -> текущий.

Пожалуйста, помогите, что бы я ни старался, я не могу получить предыдущие элементы и работать в обратном направлении. Спасибо!

Мой код operator-- является:

ListIterator<T> temp; 

temp.current = first; 

while(temp.current->link != this->current) 
{ 
    temp.current = temp.current->link; 
} 

return temp; 

Если мой список 2,4,6,8,10,12,14,16,18,20 .... она возвращает 20 каждый раз

+1

Ваши инструкции в основном говорят вам, что именно делать. Вы пробовали «вы должны начать с самого начала и идентифицировать узел, где находится этот -> текущий»? Можете ли вы показать нам, что у вас есть до сих пор? – GWW

+0

Просто перебирайте весь список, используя 'current-> link == oldCurrent' – goji

+0

Другими словами, вам нужно начинать с' head' и использовать цикл. – Adam

ответ

0

Насколько я могу судить, фактический итератор не изменяется в вашем коде. В вашем коде оператора ++ есть current = current->link, но в операторе - вы изменяете только временный итератор (т. Е. this->current никогда не меняется).

Смежные вопросы