2010-05-25 4 views
3
struct person 
{ 
    int age; 
    char name[100]; 
    struct person *next; 
}; 

void delfirst(struct person **p)// For deleting the beginning 
{ 
    struct person *tmp,*m; 
    m = (*p); 
     tmp = (*p)->next; 
    free(m); 
    return; 

} 
void delend(struct person **p)// For deleting the end 
{ 
    struct person *tmp,*m; 
    tmp=*p; 
    while(tmp->next!=NULL) 
    { 
     tmp=tmp->next; 
    } 
    m->next=tmp; 
    free(tmp); 
    m->next = NULL; 
    return; 

} 

Я ищу две отдельные функции для удаления первого и последнего элементов связанного списка. Вот что я пробовал. Что ты предлагаешь? Особенно для меня первое удаление - настолько проблематично.Удаление первого и последнего элемента связанного списка в C

+0

Какая у вас проблема с этим кодом? –

+0

В вашей 'delend' функции' m' ничего не делается. – nico

ответ

2
if (!p || !(*p)) 
     return; 
    struct person *tmp; 
    tmp = (*p); 
    (*p) = (*p)->next; 
    free(tmp); 
    return; 

void delend(struct person **p)// For deleting the end 
{ 
    if (!p || !(*p)) 
     return; 
    if (!(*p)->next) 
    { 
     *p = NULL;  
    } 
    struct person *tmp,*m; 
    tmp=*p; 
    while(tmp->next->next!=NULL) 
    { 
     tmp=tmp->next; 
    } 
    free(tmp->next); 
    tmp->next = NULL; 
    return; 

} 
+1

@ LuckySlevin: Вы также можете проверить этот сайт http://richardbowles.tripod.com/cpp/linklist/linklist.htm, немного беспорядочный визуальный, но научит вас удалять элементы в связанном списке –

+0

@Junior Mayhé great resource, i например, фотографии – Andrey

+0

Andrey спасибо, что решает мою проблему для удаления первого узла. – LuckySlevin

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