我被要求在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 ;
}
答案 0 :(得分:1)
我喜欢你的代码,至于从头到尾打印列表,这就是链表的作用。如果您的输入是 1,2,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