2013-12-13 218 views
-2

我在鏈接的字符列表上使用以下代碼。但是每當我運行這個程序時,我都會遇到運行時錯誤。從鏈接列表中刪除節點

void ldellist(Node *head,char k) 
{ 
    Node *remove=head; 
    Node *previous=head; 
    while(remove->data!=k) 
    { 
     remove=remove->next; 
    } 
    while(previous->next!=remove) 
    { 
     previous=previous->next; 
    } 
    previous->next=remove->next; 
    free(remove); 
} 

有人能告訴我什麼問題?

+1

歡迎來到Stack Overflow!要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後如果有必要,你應該構建一個[最小測試用例](http://sscce.org)。) –

+0

夥計們!只是爲了說清楚,我知道我是從中間去掉一個角色,而不是從頭部或尾部去除角色。 – user3097890

+0

你的免費(Node *)功能是什麼樣的? –

回答

0

也許你需要做一些檢查?

void ldellist(Node *head,char k) { 
    Node *remove=head; 
    Node *previous=head; 
    while(remove && remove->data!=k) { 
    remove=remove->next; } 
    while(previous && previous->next!=remove) { 
    previous=previous->next; } 
    if (remove) { 
    previous->next=remove->next; 
    free(remove); 
    } else { 
    // print some error like 'not found' 
    } 
} 
0

在何時刪除節點是頭的情況下,你會得到「刪除」等於「頭」和條件「previous->下!=去掉」將是總是如此。