双while打印元素的困惑

问题描述 投票:0回答:1

这里有两个链表'list1'和'list2'。

list1 和 list2 有两个数据:data1,data2。

它们有以下节点:(data1, data2)

list1 : (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;
    }

起初,我期望输出为:

list1, list1, list2, list1, list1, list2, list1, list1, list2(我的意思是打印顺序)

但是我得到了:

list1, list1, list2, list2, list2.

所以我的问题是:

  1. 为什么我的期望落空了?

  2. 我应该如何更改我的代码以使代码像我期望的那样工作?

谢谢

c while-loop linked-list nested-loops
1个回答
0
投票

内部 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 循环只有一次迭代。

© www.soinside.com 2019 - 2024. All rights reserved.