C语言 查找值出现并删除链表中的节点



我真的需要帮助关于c中的链表问题。

我需要创建一个函数,其中我必须读取列表中的节点,并且对于每个节点,我必须找到出现的节点。如果该值的出现次数等于或大于某个变量值,则必须删除该节点。

的例子:5 8 1→3→→→→6 8→3→8→9

#of occurrences>= 3

所以所有值为8的节点必须被删除。

修改列表:1→3→5→6→3→9

谢谢你。

哦,对不起,我错了。是的,我尝试了一些解决方案,但仍然没有找到一个工作。对于删除所有出现的值,我这样做:

void deleteOccurrences(List *head, int val){
Lista *temp = *testa, *prev;
while(temp != NULL && temp->val == val){
*head = temp->next;
free(temp);
temp = *head;
}
while(temp != NULL){
while (temp != NULL && temp->val != val){
prev = temp;
temp = temp->next;
}
if(temp == NULL)
return;
prev->next = temp->next;
free(temp);
temp = prev->next;
}
}

和count出现次数:

bool countOccurrences(List head, int val, int occur){
int count = 0;
while(head != NULL){
if(head->val == val)
count++;
head = testa->next;
}
if(count >= occur)
return true;
return false;
}

然后我要使用的函数是这样的:

void manageList(List head){
while(head != NULL){
int val = head->val;
if(countOccurences(head, val, 3))
deleteOccurrences(&head, val);
head = head->next;
}
}

这是主要的:

int main(){
List head;
head = NULL;
head = insert(head,9);
head = insert(head,8);
head = insert(head,3);
head = insert(head,8);
head = insert(head,6);
head = insert(head,5);
head = insert(head,8);
head = insert(head,3);
head = insert(head,1); 
manageList(head);
return 0;
}

其中insert()函数只是在列表的开头插入。

节点的定义:

typedef struct El{
int val;
struct El *next;
}ElemList;
typedef ElemList *List;

当我编译和运行这个我得到一个分割错误错误。如果我尝试只运行deleteOccurrences()函数或countooccurrences()函数,它们会按预期工作。问题是在这个函数manageList(),我不明白如何读取列表,并在同一时间找到事件和删除节点。

void manageList(List *head){
ElemList *cur = *head;
while(cur != NULL){
int val = cur->val;
if(countOccurences(cur, val, 3)){
deleteOccurrences(cur, val);
cur = *head;
}else
head = head->next;
}
}

相关内容

  • 没有找到相关文章

最新更新