双向链接列表递归的麻烦

时间:2017-03-25 01:51:54

标签: c recursion data-structures

我无法进行递归删除,目前我可以删除1个节点,因为我应该删除所有匹配项。我无法删除循环中的所有实例。

void delete(struct node *ptr){
    struct node *tmp; 
    while(ptr->next != NULL && (ptr->next)->critical = 'c'){
        ptr = ptr->next; //Iterate until I find a node next to data
    }
    if(ptr->next == NULL){
        printf("No Element");
    }
    tmp = ptr->next;
    if(tmp->next == NULL){
        ptr->next = NULL;
    } else {
        ptr->next = tmp->next;
        (ptr->next)->prev = tmp->prev;
    }
    tmp->prev = ptr;
    free(tmp);
}

工作更新 我只需将所有这些放在另一个(ptr!= NULL){... ptr = ptr-> next}循环中进行递归删除。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题 更正的代码是

void delete(struct node *ptr){
    struct node *tmp; 
    while(ptr)
   {
    if(ptr->critical!='c')
        {tmp=ptr;
        ptr=ptr->next;
        ptr->prev=null;
        free(tmp);}
     else
       break;

   }
    while(ptr->next!=null)
    {
      if(ptr->next->critical=='c')
        ptr=ptr->next;
      else
       {
           tmp = ptr->next;
           if(tmp->next == NULL){
             ptr->next = NULL;
           } else {
            ptr->next = tmp->next;
           (ptr->next)->prev = tmp->prev;
           }
          tmp->prev = ptr;
          free(tmp);
       }
    }

查看代码中的更正

我首先从列表的开头删除所需的值。
然后我继续删除这些值,直到我到达最后一个节点为止。你的代码问题是,每当你删除一个值时,你都没有检查列表中的其他值。