2012-04-13 134 views
-1

我很难搞清楚为什么我的删除功能不起作用。这是一个布尔值,如果一个项目被删除,它需要返回。任何帮助,将不胜感激从单个链接列表中删除一个节点C

boolean delete(SLL *list, String str){ 
    NODE *current, *previous,*temp; 
    temp=malloc(sizeof(Employee)); 
    previous=NULL; 
    current = list -> head; 


    while(current->next!=NULL) { 
     if(strcmp(current->anEmployee->name, str) == 0){ 
      if(current=list->head){ 
       list->head=current->next; 
      } 

      if(previous->next == NULL){//item not found in list 
       return 0; 
      } 
     else { //current is to be deleted 
      temp->next=current->next; 
      previous->next=temp->next; 

      return 1; 
     } 
    } 
} 
+0

什么不行呢? – 2012-04-13 20:01:02

+3

if(current = list-> head){ 应该是==吗? – strkol 2012-04-13 20:01:53

+1

也有你在函数中有内存泄漏,不需要临时变量 – strkol 2012-04-13 20:10:01

回答

2

你如果在那里你比较当前的列表 - >头(根列表中的节点,初步)语句,被分配节点的电流,而不是比较它。

+0

谢谢。但仍然没有删除。 – 2012-04-13 20:13:15

+0

在循环的内部,您推进列表的根节点(即:list-> head)而不是当前节点,所以字符串比较只是比较list-> head的名称和传入的名称。它会是值得你花时间阅读Sangeeths链接,关于从链表中删除节点。 – thelazydeveloper 2012-04-13 20:42:12

+0

此外,前一个指针设置为NULL - 如果传入的字符串不匹配list-> head的名称,它应该seg段。 – thelazydeveloper 2012-04-13 20:50:32