首页 > 解决方案 > 链表在C中插入结束节点

问题描述

我目前正在学习 C 中的链表,并尝试编写一个函数以在末尾插入一个节点,然后打印所有数据。

起初我的功能不起作用(只打印了 1 2)

struct node {
    int data;
    struct node *link;
};

void add_end(struct node *head, int a){
    struct node *current, *temp;
    current = head;
    temp = (struct node*)malloc(sizeof(struct node));
    temp->data = a;
    temp->link = NULL;
    while(current != NULL){
        current = current->link;
    }
   current = temp;
};

int main()
{
struct node *head;
head = (struct node *)malloc(sizeof(struct node));
head->data = 1;
head->link = NULL;

struct node *current;
current = (struct node *)malloc(sizeof(struct node));
current->data = 2;
current->link = NULL;

head->link = current;

add_end(head, 3);

current = head;

while(current != NULL){
    printf("%d\n", current-> data);
    current = current->link;
    }

return 0;
}

修复一段时间后,它起作用了(打印了 1 2 3)

void add_end(struct node *head, int a){
    struct node *current, *temp;
    current = head;
    temp = (struct node*)malloc(sizeof(struct node));
    temp->data = a;
    temp->link = NULL;
    while(current->link != NULL){
        current = current->link;
    }
   current->link = temp;
};

谁能告诉我为什么第一个不起作用。我认为它们是相同的,因为在第一个版本中:current 是最后一个节点的链接,它是下一个节点的地址(null),而在第二个版本中:current->link 是最后一个节点的链接,它也是下一个节点的地址(null)。

标签: clinked-list

解决方案


一次currentNULL您已经传递了列表中的最后一个节点,并且current是一个NULL指针。

分配给它不会将节点添加到列表中,它只会重新分配current不再是NULL指针,但最后一个节点link不会被修改。

使用第二个函数,您可以在列表中找到实际的最后一个节点,并将新节点附加到末尾。


推荐阅读