//我正在创建一个链接列表并将其遍历
但是在函数的while条件下,我对W加热器将temp!=NULL或temp!=NULL弄混了。两者表现出不同的产出。请帮帮忙。为什么他们不一样。。。。。。
#include <stdio.h>
#include <stdlib.h>
struct brick
{
int data;
struct brick * next; // self refrencing pointer
};
void printval(struct brick * temp);
void printval(struct brick * temp)
{
int i = 0;
while (temp != NULL)
{
printf("elements at index %d=%d \n", i, temp->data);
temp = temp->next;
i++;
}
}
int main()
{
struct brick *first, *second, *third;
first = (struct brick *)malloc(sizeof(struct brick));
second = (struct brick *)malloc(sizeof(struct brick));
third = (struct brick *)malloc(sizeof(struct brick));
first->data = 1;
first->next = second;
second->data = 2;
second->next = third;
third->data = 3;
third->next = NULL;
printval(first);
return 0;
} 发布于 2022-09-12 15:36:07
我总是倾向于在循环之后想到我在temp中存储的内容,以帮助我确定我想要使用的条件。例如:
i) while(temp!=NULL) { }
中断循环的条件是temp ==空。因此,在循环之后,您的temp立即指向NULL。
ii)而(temp->next!=NULL) {}
让您脱离while循环的条件是,当temp->next==NULL,退出时,即当temp指向链接列表中的最后一个节点时退出。因此,一旦我退出while循环,temp就会指向最后一个元素。
因此,如果希望整个列表(包括链接列表中的最后一个元素)运行循环,则使用(temp!=NULL),但如果希望循环运行到第二个最后一个元素,则通常使用(temp->next=NULL)。
发布于 2022-09-12 15:13:31
如果您检查temp != NULL,当您到达列表的末尾时,您的循环将终止。如果您检查temp->next != NULL,则循环将停止在列表中的最后一个元素的旁边。
它可能有助于可视化你的名单。
+--------------------+
| First |
| int data |
| struct brick *next --\
+--------------------+ |
/----------------/
|
v
+--------------------+
| Second |
| int data |
| struct brick *next --\
+--------------------+ |
/----------------/
|
v
+--------------------+
| Second |
| int data |
| struct brick *next --\
+--------------------+ |
|
v
+------+
| NULL |
+------+https://stackoverflow.com/questions/73691392
复制相似问题