gpt4 book ai didi

c - 如何创建链表(指向结构的指针)-c

转载 作者:行者123 更新时间:2023-11-30 21:01:17 26 4
gpt4 key购买 nike

已给出一些功能,但似乎无法使主要方法正常工作(主列表)。我认为会发生的是你 1 主列表和 insert_at_front 会添加到它,但它只打印出第一个列表(10)。有人知道我如何获得链接列表吗?预先感谢:)

#include <stdlib.h>
#include "week1.h"

void insert_at_front(List *self, int data)
{
List newNode = (List)malloc(sizeof(struct node));
newNode->data = data;
newNode->next = *self;
*self = newNode;

}

void print_list(List *self)
{
List current = *self;

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

int main(void)
{

List *master;


insert_at_front(&master, 10);
insert_at_front(&master, 20);

print_list(&master);

return 0;
}

标题:

    typedef struct node
{
int data;
struct node *next;
} *List;

void print_list(List *self);
void insert_at_front(List *self, int data);

最佳答案

typedefed List作为指向您的 struct node 的指针所以List *master的声明实际上是一个指向 node 的指针。 。当获取master的地址时( &master ) 你得到一个指向 node 的指针的指针。不完全是你想要的:)

您需要更改 master 的声明指向 node 的指针然后获取它的地址

List master; // before: List* master

insert_at_front(&master, 10);
insert_at_front(&master, 20);

print_list(&master);

编辑:

还包括<stdio.h>使用printf .

<小时/>

目前您还创建了 memory leak因为您通过调用 malloc 来分配内存但从不打电话free

通常,您能做的最好的事情就是在您编写了首先分配内存的内容后立即编写一个清理函数来释放内存。清理可能如下所示:

void delete_list(List* self)
{
while ((*self)->next)
{
List tmp = *self;
List last;
while ( tmp->next != NULL)
{
last = tmp;
tmp = tmp->next;
}
free(last->next); // delete the last node in the list
last->next = NULL;
}
free(*self); // now delete the only existing node
}

关于c - 如何创建链表(指向结构的指针)-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150642/

26 4 0
文章推荐: c# - 订阅事件的后台 worker
文章推荐: javascript - 在 javascript 中映射 Map 的语义正确方法
文章推荐: c# - 从用户输入创建 Uri
文章推荐: javascript - 无法读取未定义的属性 '#',在检索 onClick Custom React 之后