2015-06-27 3 views
-2

Я пытаюсь получить целое число любого размера в связанном списке в C. Но когда я печатаю список, нуль печатается всегда после целого числа. Обратите внимание, что я добавляю каждую цифру целого к голове. (Головка имеет 0-й место целого)Печать связанного списка целых чисел в C

#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. Я пытался найти решение , но не смог. Пожалуйста, помогите

+1

'структура узла * head1 = таНос (SizeOf (структура узла *));' -> 'структура узла * head1 = таНос (SizeOf (структура узла)); 'или' struct node * head1 = malloc (sizeof (* head1)); 'и' struct node * tmp = malloc (sizeof (struct node *)); '->' struct node * tmp = malloc (sizeof (struct node)); 'или' struct node * tmp = malloc (sizeof (tmp *)); ' –

+0

О, получилось. Благодарю. Очень глупо от меня – pahan

+0

Не забудьте «освободить» выделенную память! –

ответ

3

Вы являетесь еще одним узлом, чем необходимо, когда вы назначаете head1. Вам просто нужно вызвать функцию get_number() как:

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

, который установил бы next последнего элемента (то есть первый выделить узел) для 0 и остальной логики было бы хорошо.

Кроме того, необходимо правильно называть malloc() и изменить тип c к int (для обработки EOF), как указано в комментариях. Мой предпочтительный способ заключается в выделении памяти:

TYPE *p = malloc(sizeof *p); 
+0

Спасибо! Выделение памяти для головы было неправильным, и он создал новый узел. Это причина нуля. Спасибо за другие советы! – pahan

Смежные вопросы