从链表中删除元素

时间:2017-05-30 23:12:35

标签: c linked-list

我在删除给定链表中的元素时遇到了一些问题。这就是我所拥有的:

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函数将打印出整个列表,并且没有删除任何内容。关于什么是错的任何想法?

1 个答案:

答案 0 :(得分:0)

首先:似乎找不到删除元素。如果找到return语句将结束该函数,则不会调用printList(list)函数。

第二:使用break跳出for循环,而不是return

第三:你的deleteElement()应该返回指向list的指针,因为你free是第一个元素。然后,在函数内部,列表被设置为新的第一个元素,但是如果不返回新地址,则列表只是一个释放元素,并且在下次调用元素时可能会导致分段错误。