2010-05-25 90 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

你對這段代碼有什麼問題? – 2010-05-25 16:54:04

+0

在你的'delend'函數中'm'不會做任何事情。 – nico 2010-05-25 16:55:28

回答

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,有點混亂可視但教你如何刪除鏈接列表上的項目 – 2010-05-25 16:55:13

+0

@JuniorMayhé很棒的資源,我就像那張圖片 – Andrey 2010-05-25 16:56:40

+0

Andrey謝謝你解決我刪除第一個節點的問題。 – LuckySlevin 2010-05-25 16:56:43