在 C 中打印整数链表

Printing a linked list of integers in C

我正在尝试将任意大小的整数添加到 C 中的链表中。但是当我打印列表时,总是在整数之后打印一个零。 请注意,我将整数的每一位都添加到头部。(头部是整数的第 0 位)

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int digit;
    struct node* next; 
};

void get_number(struct node** head);
int create_node(int digit, struct node** head);
void printlist(struct node* head);


int main()
{
    struct node* head1 = malloc(sizeof(struct node*));

    get_number(&head1);

    printlist(head1);

    return 0;   
}

int create_node(int digit, struct node** head)
{
    struct node* tmp = malloc(sizeof(struct node*));

    tmp -> digit = digit;
    tmp -> next = *head;

    *head = tmp;

}

void printlist(struct node* head)
{
    struct node* curr = head; 
    if(!head)
        return;

    while(curr != NULL )
    {
        printf("%d",curr -> digit);
        curr  = curr -> next;
    }
}   

void get_number(struct node** head)
{
    int k;
    char c;

    c = getchar();
    while(c != '\n' && c != ' ')
    {
        k = c - '0';
        create_node(k, head);
        c = getchar();
    }
}

当我输入123456时,输出是1234560。 我试图找到解决方案,但找不到。请帮助

当你分配给head1时,你比必要的多了一个节点。您只需将函数 get_number() 调用为:

   struct node* head1 = 0;
   get_number(&head1);

这会将最后一个元素(即第一个分配节点)的 next 设置为 0,其余逻辑就没问题了。

您还需要正确调用 malloc() 并将 c 的类型更改为 int(以处理 EOF),如注释中所述。我首选的内存分配方式是:

TYPE *p = malloc(sizeof *p);