C程序链表添加到末尾
C program linked list add to end
这个程序应该从用户那里获取一个项目并将其放在列表的末尾。
如果我输入:batteries, flashlight and pens as the item name.
顺序应该是
1 batteries
2 flashlight
3 pens
但是顺序是:
3 pens
2 flashlight
1 batteries
我的密码是:
struct item *end_of_list(struct item *inventory)
{
struct item *cur, *new_node;
new_node = malloc(sizeof(struct item));
if (new_node == NULL) {
printf("malloc failed\n");
return inventory;
}
printf("Enter item ID: \n");
scanf("%d", &new_node->number);
for(cur=inventory; cur != NULL; cur = cur->next) {
if (cur != NULL && new_node->number == cur->number) {
printf("item already exists: %s\n",new_node->item_name);
free(new_node);
return inventory;
}
}
printf("Enter item name: \n");
printf("%s, new_node->item_name")
new_node->next = NULL;
if (inventory == NULL) {
inventory = new_node->next;
} else {
while (new_node->next != NULL) {
new_node = new_node->next;
}
new_node->next = inventory;
}
return new_node;
}
您似乎在函数底部颠倒了 inventory
和 new_node
。您在 NULL
案例中的分配也是错误的,因为 new_node->next
是 NULL
。尝试以下操作:
if (inventory == NULL) {
inventory = new_node;
} else {
cur = inventory;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
return inventory;
这个程序应该从用户那里获取一个项目并将其放在列表的末尾。
如果我输入:batteries, flashlight and pens as the item name.
顺序应该是
1 batteries
2 flashlight
3 pens
但是顺序是:
3 pens
2 flashlight
1 batteries
我的密码是:
struct item *end_of_list(struct item *inventory)
{
struct item *cur, *new_node;
new_node = malloc(sizeof(struct item));
if (new_node == NULL) {
printf("malloc failed\n");
return inventory;
}
printf("Enter item ID: \n");
scanf("%d", &new_node->number);
for(cur=inventory; cur != NULL; cur = cur->next) {
if (cur != NULL && new_node->number == cur->number) {
printf("item already exists: %s\n",new_node->item_name);
free(new_node);
return inventory;
}
}
printf("Enter item name: \n");
printf("%s, new_node->item_name")
new_node->next = NULL;
if (inventory == NULL) {
inventory = new_node->next;
} else {
while (new_node->next != NULL) {
new_node = new_node->next;
}
new_node->next = inventory;
}
return new_node;
}
您似乎在函数底部颠倒了 inventory
和 new_node
。您在 NULL
案例中的分配也是错误的,因为 new_node->next
是 NULL
。尝试以下操作:
if (inventory == NULL) {
inventory = new_node;
} else {
cur = inventory;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
return inventory;