链表头始终设置为NULL

时间:2019-05-27 13:45:48

标签: c linked-list

我试图将多米诺骨牌故事添加到链接列表中,但是每次我调用函数<!-- This button has red background but not red text --> <button class="Button_error_ax7yz">Error Button</button> 时,头总是停留在var aResolution : JPoint; begin aResolution := TJPoint.Create; TAndroidHelper.Display.getRealSize(aResolution); end; 上:

add_domino(struct Domino *list, int a ,int b)

2 个答案:

答案 0 :(得分:1)

要么返回更新的头指针,然后像这样使用它:

struct Domino* list = NULL;
list = add_domino(list, 1, 2);

或者将指针传递给指针,然后像这样使用它:

struct Domino* list = NULL;
add_domino(&list, 1, 2);

此外,您的函数不会处理不足的内存。

接下来,sizeof *pointer胜过sizeof(TYPE),因为重复容易出错,尤其是在编译器不检查不匹配的情况下。

最后,请考虑在开头而不是结尾处添加,以避免重复遍历整个列表。如果需要,可以在最后反转列表,这是O(n)恒定空间操作。

答案 1 :(得分:0)

您缺少带有更新的指向头部的返回的信息。

struct Domino* add_domino(struct Domino *list, int a ,int b) {
    struct Domino *D = malloc(sizeof(struct Domino));
    D->a = a;
    D->b = b;
    D->next = NULL;

    if(list == NULL) {
        list = D;
        return list;
    } else {
        struct Domino *p;
        p = list;
        while(p->next != NULL) {
            p = p->next;
        }
        p->next = D;
    }
  return list;
}