给定元素之前的双重链接列表插入

时间:2014-12-18 22:32:45

标签: c pointers

我正在尝试学习如何正确使用C中的指针。目前,我正在尝试创建将在该节点之前插入新节点的函数,该值被赋予。我的功能如下:

struct list *listAddBefore(struct list *element, int insertWhat, int insertBefore)
{
    element = listToFirst(element);

    while (element -> next)
    {
        if (element -> value == insertBefore)
        {
            struct list *temp = listCreateElement(insertWhat, element->prev, element);

            element -> prev -> next = temp;
            element -> prev = temp;

            return temp;
        }
        element = element -> next;
    }

    return NULL;
}
struct list *listToFirst(struct list *element)
{
    while (element -> prev)
        element = element -> prev;

    return element;
}


struct list *listCreateElement(int value, struct list *prev, struct list *next)
{
    struct list *element = (struct list *) malloc(sizeof(struct list));

element -> value = value;
element -> prev = prev;
element -> next = next;
return element;
}

有什么问题?编译器给我分段错误。

1 个答案:

答案 0 :(得分:1)

  1. 您的代码有一个重要问题

    while (element->next)
    

    应该是

    while (element)
    

    因为对于第一个元素element->next = NULL,因此您的函数将立即返回NULL。然后,您将再次传递head元素,并在每次调用此函数时重复该行为。

  2. 下面

    element->prev->next = temp;
    

    您将取消引用第一个节点必须为element->prev的{​​{1}},您必须检查它是否有效,否则您将导致segmentation fault。这是链接节点的正确方法。

  3. 我修复了您的代码,以帮助您了解如何使用链接列表

    NULL