标题相当自我解释。下面是我为这个目的编写的功能:删除链接列表中具有特定值的所有节点
void wipeLoneCells()
{
cell *tmp;
tail = head;
while (1)
{
if (head == tail && !tail->flag)
{
head = head->next;
free(tail);
tail = head;
continue;
}
tmp = tail->next;
/***/ if (tmp->next == NULL && !tmp->flag)
{
tail->next = NULL;
free(tmp);
break;
}
else if (!tmp->flag)
{
tail->next = tmp->next;
free(tmp);
continue;
}
tail = tail->next;
}
}
名单的头和尾是全球性的,而列表是通过这个函数被调用头指向第一个节点和尾指向时建最后(其下一个是NULL)。我几乎可以肯定,我的链接列表是正确构建的,因为我可以毫无错误地打印它们。有时候,这个函数完美地工作,有时它会在标有星号的行上导致访问冲突。我知道这并不是完全错误的,因为当我没有产生错误时,我得到了我想要的结果,尽管我经常得到错误,所以一定有一些我忽略的东西。预先感谢您的任何帮助。
编辑:这里是固定码:
void wipeLoneCells()
{
cell *tmp;
tail = head;
while (1)
{
if (head == tail && !tail->flag)
{
head = head->next;
free(tail);
tail = head;
continue;
}
tmp = tail->next;
if (tmp->next == NULL && !tmp->flag)
{
tail->next = NULL;
free(tmp);
break;
}
else if (tmp->next == NULL)
{
tail = tmp;
break;
}
else if (!tmp->flag)
{
tail->next = tmp->next;
free(tmp);
continue;
}
tail = tail->next;
}
}
你能告诉我们'细胞'的定义吗? – fge 2011-12-23 12:12:25
提示:如果您使用笔和纸手写并在该基础上手动执行步骤和写入代码,则链接列表问题更容易解决。 – 2011-12-23 12:46:44