被赋予了一些函数,但似乎无法让主方法工作(主列表)。我认为会发生的是 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("%dn", 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);
编辑:
还包括用于使用 printf
的<stdio.h>
。
目前,您还创建了内存泄漏,因为您通过调用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
}