删除链接列表中的节点

问题描述:

这里是我的代码,用于删除参数中传递值的所有节点。删除链接列表中的节点

typedef struct nodetype 
{ 
    int data; 
    struct nodetype * next; 
} node; 

typedef node * list; 


void Linklist::deleteNode(list * head, int value) 
{ 

    list current = *head; 
    list previous = *head; 
    while(current != NULL) 
    { 
     if(current->data != value) 
     { 
       previous = current; 
       current = current->next; 
     } 

     else if (current->data == value) 
     { 
      previous->next = current->next; 
      delete current; 
      current = previous->next; 

     } 
    } 
} 

但在这里,如果在链表的所有元素是说2,那么就应该删除链表的所有元素,并最终负责人也应该成为NULL,这样,如果我通过这个头计算节点的数量在列表中应该说列表是空的和其他类似的操作。

根据我目前的实施情况,头部在上述情况下不会变为NULL。

请建议修改,以便如果链接列表中的所有节点具有在函数参数中传递的相同值,则头应该变为NULL。

+3

其工作文件,如果不做作业,请尝试使用'的std :: list'容器类。如果这是作业,请在作业中添加“作业”标签。 – 2012-04-17 20:16:08

我修改我的代码如下现在

void Linklist::deleteNode(list *head, int value) 
{ 

    list * current = head; 
    list * previous = head; 
    bool flag = false; 
    while(*current != NULL) 
    { 
     if((*current)->data != value) 
     { 
      *previous = *current; 
      *current = (*current)->next; 
     } 

     else if ((*current)->data == value) 
     { 
      flag = true; 
      (*previous)->next = (*current)->next; 
      delete *current; 
      *current = (*previous)->next; 

     } 
    } 
    if(!flag) 
     cout<<"Element not found in the linklist\n"; 
    cout<<"Count is "<<Linklist::count(*head)<<endl; 
}