【问题标题】:Adding item in linked list C在链表 C 中添加项目
【发布时间】:2016-06-02 19:11:25
【问题描述】:

当我想将项目添加到链表时,我的程序崩溃了。 这是我正在使用的结构

typedef struct seats
    {
    int number, reserved;
    char name[1000]; 
    } seats;
    // node list
    typedef struct node
    {
    seats seat;
    struct node * next;
    } node_t;

这是我的insert 函数

void AddSeat(node_t * head, seats a_seat) // unos podataka na kraj liste
    {
    node_t * current = head;
    while (current->next != NULL) {
        current = current->next;
    }

    /* now we can add a new variable */
    current->next = malloc(sizeof(node_t));
    current->next->seat = a_seat;
    current->next->next = NULL;
    }

【问题讨论】:

  • 您能否edit 您的问题是添加您为列表创建第一个节点的代码,以及您调用 AddSeat 的代码?
  • 您正试图通过价值传递席位。您需要将指针传递给您的例程。
  • 您已成功通过价值传递席位:) 不幸的是,这不是您需要做的,因为您只修改了指针的副本:(
  • ...如果您在调试器下运行应用程序,您会意识到这一点。
  • 这个问题不是seats a_seat,而是node_t * head。初始化链表和第一次调用addSeat()

标签: c list input linked-list


【解决方案1】:

其实我觉得你的逻辑是错误的。

在链表中,你从一个空节点开始:

[ ]->

当你有东西要存储时,你填充节点。

[X]->

然后在其末尾创建一个新的空节点。

[X]->[ ]

等等..等等..

[X]->[X]->

[X]->[X]->[ ]

在您的代码中,您正在向新元素添加值。当您位于列表的末尾时,您将座位分配给当前节点,然后在末尾创建一个新(空)节点 .您还应该为节点创建一个变量,为其分配内存,然后将节点指向它。

为了让链表在你拥有的地方工作

/* now we can add a new variable */
current->next = malloc(sizeof(node_t));
current->next->seat = a_seat;
current->next->next = NULL;

你应该有

void AddSeat(node_t *head, seats a_seat){
    node_t *current = head;
    node_t *new_node;

    ...

    new_node = malloc(sizeof(node_t));
    current->seat = a_seat;
    current->next = new_node;

    ...

}

在用 C 语言编写代码时,请考虑遵循一些良好做法,例如将指针运算符 (*) 附加到变量名称(char *var 而不是 char * var)并正确缩进您的代码。它大大提高了可读性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    相关资源
    最近更新 更多