我无法进行递归删除,目前我可以删除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}循环中进行递归删除。
答案 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);
}
}
查看代码中的更正
我首先从列表的开头删除所需的值。
然后我继续删除这些值,直到我到达最后一个节点为止。你的代码问题是,每当你删除一个值时,你都没有检查列表中的其他值。