Проблема метода вставки в двойной список - PullRequest
1 голос
/ 17 апреля 2011

Хорошо, поэтому по какой-то причине этот код не совсем работает для моей функции insertBack для класса шаблонов двусвязных списков Dlist.

template <typename T>
void Dlist<T>::insertBack(T *o)
{
    node *findLast;
    node* newNode = new node;
    newNode->next = NULL;
    newNode->prev = NULL;
    newNode->o = o;

    if (first == NULL){
        first = newNode;
        last = newNode;
    } else {
        findLast = first;
        while (findLast->next){
            findLast = findLast->next;
        }
        newNode->prev = findLast;
        last = newNode;
    }

}

first и last соответствуют первому и последнему узлам Dlist.Моя проблема в том, что 'last' не присваивается newNode в конце.Когда я отлаживаю (используя VS2010), newNode правильно присваивается значение аргумента метода, а его «предыдущий» узел правильно присваивается «findLast».Но когда я назначаю последний для newNode, ничего не происходит.

Если это не очевидно сразу, я рад опубликовать фактическое определение класса для Dlist, хотя это довольно стандартный связанный список.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2011

Если это двусвязный список, и вы отслеживаете последний узел ... почему вы перебираете весь его путь, чтобы добавить в конец?

Все, что вам нужно сделать, это:

node* newNode = new node;
newNode->o = o;
newNode->previous = last;
last->next = newNode;
last = newNode;
0 голосов
/ 17 апреля 2011

Вам не хватает findLast->next = newNode;

...