2015-11-06 6 views
0

Когда я запустил этот код, он return s правильный номер, но он не delete после этого.Удалить последний узел из связанного списка C++

Я пробовал несколько других функций, и они тоже не работают. Что-то не так с моей функцией, или я должен смотреть за ее пределами?

int Stack::remove() 
{ 
    clean = head; //clean is what it to be deleted. Head is the beginning 

    while (clean->next != NULL) //stop at the end of list 
    { 
    clean = clean->next; //move it along 
    } 

    return clean->number; //this gives me the right number 
    delete clean; //but when I print list in main, last item is still there 
    clean = NULL; //something about dangling pointers 
} 

ответ

2

Проблема в том, что НИЧЕГО после выполнения оператора возврата не выполняется.

Итак, скопируйте значение pure-> number в некоторую временную переменную, удалите очистить и верните значение временной переменной.

1

Необходимо убрать указатель, указывающий на узел, который вы хотите удалить, либо указатель на голову, либо следующий указатель в предыдущем узле.

Затем вы можете удалить его и вернуть номер. Кроме того, как указывает Павел, вы должны помнить номер, удалять узел и THEN возвращать его.

Я всегда делал это таким образом:

if (head == NULL) { 
    //return some error condition 
} 
Node **pclean = &head; 
while ((*pclean)->next != NULL) { 
    pclean = &((*pclean)->next); 
} 
int ret = (*pclean)->number; 
delete *pclean; 
*pclean = NULL; 
return ret; 

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

Теперь, если это указание, тогда не включайте этот код - ваш проф узнает, что вы его не пишете. Сделайте это без указателя на указатель.

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