【发布时间】:2018-01-27 15:23:47
【问题描述】:
我有一个如下的循环链表,用于保存待处理数据的状态。状态用于决定从列表中删除,可以是开头、中间或结尾。该列表有时甚至可能根本没有任何数据,或者可能有多个节点要删除。
struct data
{
bool status;
char other_info[20];
struct data *next;
};
我尝试了以下代码
struct data* delete_nodes(struct data *head)
{
struct data* first = NULL, *prev = NULL, *temp = NULL;
first = head;
temp = head;
prev = head;
do
{
//prev = temp;
if (temp != NULL && temp->next == head)
{
head->next = NULL;
free(temp);
head = NULL;
return head;
}
if (temp != NULL && temp->status == true)
{
//temp = prev;
prev->next = temp->next;
free(temp);
temp = prev->next;
}
else if(temp != NULL)
temp = temp->next;
if (temp == NULL)
return head;
} while (temp != NULL && first != temp);
head = temp;
return head;
}
现在,将数据推送到其中可以正常工作。如果只有一个节点,删除也可以正常工作。但是当有多个节点被删除时,它会崩溃。
delete_nodes() 函数由一个线程调用,该线程处理数据(如果有)并调用delete_nodes()
【问题讨论】:
-
delete_nodes()是否删除除头部以外的所有节点? -
它应该删除任何节点,只要它的'status'是'true'
-
如果状态为真,包括头部,对吧?
-
是的,没错。
标签: c circular-list