扫描c中的链接列表

时间:2017-05-07 17:57:06

标签: c list scanf

我被要求在c中创建链接列表。用户应该通过一次添加一个数字来插入列表,从最高有效数字到不重要数字。问题在于,当我打印列表(不是反向)时,在扫描后(例如调用3个数字的函数),它会向后打印(从头到尾,而不是从头到尾)。我正在输入3,2,1,它打印321而不是123.我真的卡在这里。有什么帮助吗?

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


listnode_t *create_list(int numdigits) 
{
listnode_t *ptr, *head;
ptr = (listnode_t*)malloc(sizeof(listnode_t));
ptr -> next= NULL;
head = ptr;

int i=0;
int userdigit;

do{
    scanf("%d",&userdigit);
    if (userdigit<0 || userdigit>9)
    {
        printf("Give from 0 to 9\n");
    }
    else{
        ptr -> digit = userdigit;
        ptr -> next = (listnode_t*)malloc(sizeof(listnode_t));
        ptr = ptr -> next;

        i+=1;
    }
}while (i<numdigits);

ptr -> next = NULL;

return head;

}   

void print_number(listnode_t *head)
{
if ((head->next) == NULL){

    printf("Empty list\n");
    return;
}

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

return ;
}

1 个答案:

答案 0 :(得分:1)

我喜欢你的代码,至于从头到尾打印列表,这就是链表的作用。如果您的输入是 1,2,3 则:

  • head->digit == 1
  • head->next->digit == 2
  • head->next->next->digit == 3

不过,如果你想反转链表,你可以使用一个函数来做到这一点,例如:

node* reverse(node* head)
{
    node* prev    = NULL;
    node* current = head;
    node* next;
    while (current != NULL)
    {
        next  = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }
    head = prev;
    return head;
}

更多信息:https://www.zentut.com/c-tutorial/c-linked-list/#Reverse_linked_list