我在删除给定链表中的元素时遇到了一些问题。这就是我所拥有的:
void deleteElement(node *list)
{
node *currP, *prevP = NULL;
for (currP = list; currP != NULL; prevP = currP, currP = currP->next) {
if(currP->info.name[0] == 'A') { /* Found it. */
if (prevP == NULL) {
list = currP->next;
} else {
prevP->next = currP->next;
}
free(currP);
return;
}
}
printList(list);
}
以这种方式编写printList函数将打印出整个列表,并且没有删除任何内容。关于什么是错的任何想法?
答案 0 :(得分:0)
首先:似乎找不到删除元素。如果找到return
语句将结束该函数,则不会调用printList(list)
函数。
第二:使用break
跳出for
循环,而不是return
。
第三:你的deleteElement()
应该返回指向list
的指针,因为你free
是第一个元素。然后,在函数内部,列表被设置为新的第一个元素,但是如果不返回新地址,则列表只是一个释放元素,并且在下次调用元素时可能会导致分段错误。