从链接列表中删除元素
问题描述:
我从给定链接列表中删除元素有一些问题。这是我得到的:从链接列表中删除元素
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函数打印我的整个列表,它就像没有被删除。有什么错误的想法?
答
第一:似乎没有找到删除元素。如果发现return
语句会结束该函数,并且printList(list)
函数将不会被调用。
第二:使用break
跳出for
循环而不是return
。
第三:您的deleteElement()
应该返回指向list
的指针,表示free
的第一个元素。然后,在函数内部列表被设置为新的第一个元素,但是如果你没有返回新的地址,那么你的列表只是一个被释放的元素,当你下次调用元素时可能会导致分段错误。
'list = currP-> next;'很重要,因为它对*调用者*没有意义。 list,指针的值就是这样;一个值*。您需要通过地址(指向指针的指针)传递指针,或者使用未使用的返回结果始终返回列表头并相应地使用它。 – WhozCraig
在理解C basic之前,您不应该尝试在C中执行链表。 – Stargateur