这不是我的代码。我从这个网站上取下了这段代码:
http://www.macs.hw.ac.uk/~rjp/Coursewww/Cwww/linklist.html
我正在使用有关如何构建链接列表的参考资料。我对发生的事情有点困惑。有人可以向我解释发生了什么。我会用 1-5 标记让我感到困惑的地方。
#include<stdlib.h>
#include<stdio.h>
struct list_el {
int val;
struct list_el * next;
};
typedef struct list_el item;
void main() {
item * curr, * head;
int i;
head = NULL; //1
for(i=1;i<=10;i++) {
curr = (item *)malloc(sizeof(item));
curr->val = i;
curr->next = head; //2
head = curr; //3
}
curr = head; // 4
while(curr) { //5
printf("%d\n", curr->val);
curr = curr->next ;
}
head = NULL → 为什么 head 被设置为 NULL?我知道你应该这样做(我这样做是出于习惯),但我真的不知道为什么。
curr->next = head → 我也从来没有真正理解过这一点。也许我对“头”的定义是错误的,但在常规链表中,它是列表中的起始节点还是最后一个节点?我一直认为它是起始节点,但在这一行中,它看起来像是最后一个节点。
head = curr → 为什么我们将它设置为等于 curr?
curr = head → 然后在循环完成后设置 curr = head。
while(curr) → 只是为了确保,这是遍历列表,它相当于 while(curr != NULL) 对吗?