提问人:bFur4list 提问时间:4/19/2023 最后编辑:BarmarbFur4list 更新时间:4/20/2023 访问量:48
对使用双while 打印元素感到困惑
Confusion about printing elements with double-while
问:
这里有两个链表“list1”和“list2”。
其中 list1 和 list2 有两个数据:data1、data2。
它们具有以下节点:(data1, data2)
list1
:(1,1) - (2,2)
list2
:(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赞
Vlad from Moscow
4/19/2023
#1
在第一次执行内部 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;
}
指针变为 等于 。那么在执行完代码后,在内部的while循环之后,指针也等于。因此,两个 while 循环只有一次迭代。list1
NULL
list2
NULL
如果你想得到预期的输出,比如
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;
}
评论
0赞
Barmar
4/19/2023
我没有看到任何可以解决问题的更改。
0赞
Vlad from Moscow
4/19/2023
@Barmar 对程序中发生的事情进行了解释。
评论
list1
list1 != NULL
head
list1 = head; while(list1 != NULL){ ... }
link1
list1 = list1->NextNode;