69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TSIZE 20
struct film
{
char title[TSIZE];
int rating;
struct film * next;
};
int main(void)
{
struct film * head = NULL;
struct film * prev,* current;
char input[TSIZE];
printf("输入名字:\n");
while(gets(input) != NULL && input[0] != '\0')
{
current = (struct film *)malloc(sizeof(struct film));
if(head == NULL)
head = current;
else
prev->next = current;
current->next = NULL;
strcpy(current->title,input);
printf("输入等级:\n");
scanf("%d",¤t->rating);
while(getchar() != '\n')
continue;
printf("输入下一个标题:\n");
prev = current;
/*这个地方,首先先问上面else部分的prev->next = current这句话,当执行prev->next的时候,是不是就创建了一个新的
struct film *结构?
如果是,那上面prev = current;这句话就明白了,把每次新的prev 指向新创建的current
如果不是,prev = current;这句话就不明白了,每次都执行,相当于把前面的指针值覆盖了*/
}
if(head == NULL)
printf("没有数据\n");
else
printf("数据如下:\n");
current = head;
while(current != NULL)
{
printf("%s,%d\n",current->title,current->rating);
current = current->next;
}
current = head;
/////////////////////////////////////
while(current != NULL)
{
free(current);
current = current->next;
}
/*这道题运行时是错的,原因在释放这段代码,是不是因为free(current);把current释放掉,current指针里的值未知了,
所以current = current->next;就不一定是下一个表了?怎么改好呢*/
////////////////////////////////////
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TSIZE 20
struct film
{
char title[TSIZE];
int rating;
struct film * next;
};
int main(void)
{
struct film * head = NULL;
struct film * prev,* current;
char input[TSIZE];
printf("输入名字:\n");
while(gets(input) != NULL && input[0] != '\0')
{
current = (struct film *)malloc(sizeof(struct film));
if(head == NULL)
head = current;
else
prev->next = current;
current->next = NULL;
strcpy(current->title,input);
printf("输入等级:\n");
scanf("%d",¤t->rating);
while(getchar() != '\n')
continue;
printf("输入下一个标题:\n");
prev = current;
/*这个地方,首先先问上面else部分的prev->next = current这句话,当执行prev->next的时候,是不是就创建了一个新的
struct film *结构?
如果是,那上面prev = current;这句话就明白了,把每次新的prev 指向新创建的current
如果不是,prev = current;这句话就不明白了,每次都执行,相当于把前面的指针值覆盖了*/
/*当然不是创建一个新的结构, 这里prev = current;只是让pre保持指向当前最新创建的节点, 以便插入下一个节点的时候, 执行prev->next = current;就是将current插入到当前链表尾*/
}
if(head == NULL)
printf("没有数据\n");
else
printf("数据如下:\n");
current = head;
while(current != NULL)
{
printf("%s,%d\n",current->title,current->rating);
current = current->next;
}
current = head;
/////////////////////////////////////
while(current != NULL)
{
prev = current->next; /*先保存后一个节点*/
free(current);
current = prev; /*再将后一个节点赋值给current*/
}
/*这道题运行时是错的,原因在释放这段代码,是不是因为free(current);把current释放掉,current指针里的值未知了,
所以current = current->next;就不一定是下一个表了?怎么改好呢*/
////////////////////////////////////
return 0;
}
while(current != NULL)
{
prev = current;
current = current->next;
free(prev);
}
void freeAll(list_t *head)/*from head to rear free the node in the list*/
{
list_t *before,*pt;
if ( head->next != NULL )
{
pt=head->next;
while ( pt->next != NULL )
{
before=pt;
pt=pt->next;
free(before);
}
free(pt);
}
free(head);
}