c语言关于链表的问题!看过《C Primer Plus》的进来!

2025-03-12 01:47:45
推荐回答(1个)
回答1:

/*收集并存储信息*/

从while循环开始讲吧, 程序要你输入一个电影名, 当gets()函数返回值不为NULL并且输入的字符串的首元素不为空字符时,进入循环体

接着用malloc()函数分配film结构空间,并让结构指针current指向它

首次循环时head = NULL, 所以头指针指向了current, 接着让current->next的值为NULL, 表示暂无下一部影片

然后调用strcpy()函数将input字符串即电影名复制到结构成员current->title中

接着让你输入影片评分,将值放进current->rating中

第二个while循环清空输入行

程序提示输入下一部影片, 然后让结构指针prev指向current

第一次循环结束,head和prev都指向current


当输入的第二个电影名符合while()循环条件,程序继续执行循环体

这里不同的是分支语句, 这次head的值不再是NULL,所以让成员prev->next(这个值前面已经设置为NULL)指向了新分配的内存


/*给出电影列表*/

如果执行到head仍为NULL,则无电影输入

否则将打印输入的电影列表


让结构指针current指向头指针head

当while循环判断current != NULL, 即current不等于空指针时,从头指针开始打印信息, 然后让current->next赋值给current,让current指向下一个结构, 继续打印电影信息


/*任务已完成, 因此释放所分配的内存*/

原代码为:

current = head;

while (current != NUll)
{
    free(current);
    current = current -> next;
}
是错误的
因为当free了current的空间时,将不能再把current->next赋给current, 它们所处的内存已被释放

正确代码为:
current = head;

while(current != NUll)
{
    prev = current->next;
    free(current);
    current = prev;
}

有不懂的可以继续追问