如何制作链表(指向结构的指针) - c.



被赋予了一些函数,但似乎无法让主方法工作(主列表)。我认为会发生的是 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
}

相关内容

  • 没有找到相关文章

最新更新