-4

我正在尝试在 C 中实现链接列表,我在列表末尾插入节点,在我插入值之后,除了最后一个值之外的所有值都在打印。这是代码:

list_t *add(list_t *l,int e)
{
list_t *head;

if(l == NULL)
{
    l = malloc(sizeof(list_t));
    l->val = e;
    l->next = NULL;
    return l;
}       

head = l;

while(l->next != NULL)
    l=l->next;

l->next = malloc(sizeof(list_t));
l=l->next;
l->val = e;
l->next = NULL;

return head;
}

这是主要功能的实现:

int main()
{
list_t *ints=NULL;
list_t *temp;
int i, choice;

while(1){
 printf("1. Enter\n2. Show List\n3. Exit\n\n");
 scanf("%d", &choice);
 switch(choice){
    case 1:
        printf("Enter item\n");
        scanf("%d", &i);
        ints = add(ints,i);
        break;
    case 2:
        temp = ints;
        while(temp->next != NULL)
        {   
            printf("%d\n",temp->val);
            temp=temp->next;
        }
        break;
    case 3:
    default:
        exit(0);

    }
}

return 0;
}
4

2 回答 2

0

这条线

while(temp->next != NULL)

明确地说“当你到达指向列表末尾的元素时停止”(即当你到达最后一个元素但在你使用它之前停止)。

而是使用

while(temp != NULL)

上面写着“当您不再在列表中时停止”。

于 2013-11-03T08:08:52.537 回答
0

在您的情况 2 中,在您的 main 函数中,一旦不再有下一个元素,您就会退出 while 循环。但是因为这是您的最后一个元素,所以它不会显示。在循环之后添加另一个打印以打印循环不包含的最后一个元素。

    while(temp->next != NULL)
    {   
        printf("%d\n",temp->val);
        temp=temp->next;
    }
    break;

变成

    while(temp->next != NULL)
    {   
        printf("%d\n",temp->val);
        temp=temp->next;
    }
    printf("%d\n",temp->val);
    break;

或更好:

    while(temp!= NULL)
    {   
        printf("%d\n",temp->val);
        temp=temp->next;
    }
    break;
于 2013-11-03T08:09:12.970 回答