C语言 打印元素与double-while混淆

ogq8wdun  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(87)

这里有两个链表'list 1'和'list 2'。
其中list 1和list 2有两个数据:data1,data2。
它们有以下节点:(data1,data2)
列表1:(1,1)-(2,2)列表2:(3,3)-(4,4)-(5,5)
(括号表示每个节点)

while (list2 != NULL)
    {
        while (list1 != NULL)
        {
            printf("list1 contains : %d, %f\n", list1->data1, list1->data2);
            list1 = list1->NextNode;
        }

        printf("list2 contains : %d, %f\n", list2->data1, list2->data1);
        list2 = list2->NextNode;
    }

首先,我期望输出为:
list 1,list 1,list 2,list 1,list 1,list 2,list 1,list 1,list 2(我的意思是打印顺序)
但我得到了
列表1,列表1,列表2,列表2,列表2。
所以我的问题是
1.为什么我的期望落空了?
1.我应该如何改变我的代码,使代码像我期望的那样工作?
谢谢

4ioopgfo

4ioopgfo1#

在第一次执行内部while循环之后(它的第一次和单次迭代)

while (list2 != NULL)
    {
        while (list1 != NULL)
        {
            printf("list1 contains : %d, %f\n", list1->data1, list1->data2);
            list1 = list1->NextNode;
        }

        printf("list2 contains : %d, %f\n", list2->data1, list2->data1);
        list2 = list2->NextNode;
    }

指针list1变为等于NULL。然后在执行内部while循环后的代码后,指针list2也等于NULL。因此两个while循环只有一次迭代。

相关问题