单链表的生成和打印
链表的生成
今天刚想明白了链表的prev/current为什么这么用,写文章记录一下
43 current = (struct film *)malloc(sizeof(struct film));
44 if (head == NULL) {
45 head = current;
46 }
47 else {
48 prev->next = current;
49 }
50 current->next = NULL;
51 strcpy(current->title, input);
52 printf("enter your rating : ");
53 scanf("%d", ¤t->rating);
在这段代码中,我们通过如下过程不断生成链表。
head == NULL
head/current
head -> current/0
head -> current/0
head -> current/0 -> NULL
head -> current/prev/0 -> NULL
head -> prev/0 -> current -> NULL
head -> 0 -> prev/current -> NULL
....
head->next一直指向第一个元素,而prev一直是最后一个元素,如果进行插入操作,每次对current进行malloc。
而在打印时,需要定义一个新指针指向头指针,再进行输出,而不能直接使用头指针进行遍历,要不就会变成野表(不知道头在哪里,而且单链表是单向的,不知道父节点是哪个)
链表的遍历
struct film *getprint;
getprint = head;
while (getprint != NULL) {
printf("Movie %s Rating %d\n", getprint->title, getprint->rating);
getprint = getprint->next;
}