2015-02-20 7 views
-1

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

int remove(node * & head) 
{ 

    if(!head) 
     return 0; 

    if(!head -> next) 
    {  
     delete head; 
     head = NULL; 
    } 


    if(!head -> next -> next) 
    {  
     return remove(head -> next); 

     delete head; 
     head = NULL; 

    } 


    return remove(head -> next); 


    } 

ответ

0

Посмотрите внимательно на то, что происходит, если head->next == NULL:

if(!head -> next) 
{  
    delete head; 
    head = NULL; 
} 

if(!head -> next -> next) 
{ 
    return remove(head -> next); 
    //some more code that can never be reached 
} 

... Вы устанавливаете head=NULL, а затем разыменования его. Есть и другие проблемы, но это хорошее место для начала.