这里有两个链表‘list1’和‘list2’.

其中,list1和list2有两个数据:data1和data2.

它们具有以下 node :(data1、data2)

  • list1:(1,1) - (2,2)
  • list2:(3,3) - (4,4) - (5,5)

(方括号表示每个 node )

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. 我应该如何更改我的代码以使代码按照我的期望工作?

谢谢

推荐答案

在第一次执行内部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.因此,Both While循环只有一次迭代.

如果您想要获得预期的输出,如

list1, list1, list2, list1, list1, list2, list1, list1, list2 

然后以写作为例.让我们假设列表对象的类型是Node

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

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

C++相关问答推荐

需要大整数和浮点数.使用long long int和long double

来自stdarg.h的c中的va_args无法正常工作<>

LONG_DOUBLE_T是否存在(标准C:C23)

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

如果dim指定数组中的数据量,使用dim-1会不会潜在地导致丢失一个元素?

如何在ASM中访问C struct 成员

限制不同类型的限定符

在Linux上使用vscode和lldb调试用Makefile编译的c代码

如何在C中只对字符串(包含数字、单词等)中的数字进行重复操作?

我的C函数起作用了,但我不确定为什么

如何在POSIX-UEFI中获得输入?

如何使用FSeek和文件流指针在C中查找文件的前一个元素和前一个减go 一个元素

错误...的多个定义(&Q)首先在这里定义&

我在C程序的Flex/Bison中遇到语法错误

C++中PUTS函数的返回值

为什么会出现此错误?二进制表达式的操作数无效

计算时出现奇怪的计算错误;N Select K;在C中

即使客户端不发送数据,也会发生UNIX套接字读取

gdb - 你能找到持有内部 glibc 锁的线程吗?

将指针的地址加载到寄存器内联拇指组件中