在 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);
我正在尝试将任意大小的整数添加到 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);