2013-12-13 70 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->下!=去掉”将是总是如此。