C语言中的链表赋值问题

我写了一个存储电影名字以及评级的链表,不理解其中以下三点

1.prev->next=current,

2.prev=current,

3.current=current->next

我目前的理解是:1.把current这个结构体指针变量的地址赋值给prev中的结构体指针变量next;2.把current这个结构体指针变量的地址赋值给结构体指针变量prev;3.令结构体指针变量current的值等于结构体指针变量next的值

不知道对吗?

以下是我的源代码:

#include

#include //malloc();原型

#include //strcpy();原型

#define SIZE 20 //最大字数

typedef struct film

{

    char title[SIZE];

    int rating;

    struct film * next;

}Film;

int main()

{

    Film *head=NULL;

    Film *prev,*current;

    char title2[SIZE];





    //写入

    puts("Scan first title(0-20 charecter)");

    while(gets(title2)!=EOF&&title2[0]!='\0')

    {       

            current = (Film *)malloc(sizeof(Film));

            //存第一个指针head

            if(head==NULL)

            {

                head=current;

            }

            //current's address 赋给next

            else

                prev->next=current; 

            strcpy(current->title,title2);

            puts("Rating is...(0-10)");

            scanf("%d",&current->rating);

            getchar();

            //节点更换

            puts("Enter next movie title");

            prev=current;



    }





    //显示

    if(head)

    {

            current=head;

            while(current!=NULL)

            {

                    printf("the title is %s,the rating is %d\n",current->title,current->rating);

                    current=current->next;  //把下一个结构体指针的地址给current

            }

    }

    else

            puts("Not find any dota...");





    //清内存

    current=head;

    while(current)

    {

            free(current);

            current=current->next;

    }

    puts("OK!");





    return 0;

}

十分感谢

2个回答

1.prev->next=current,
这是表示把新的结点链接到当前的链表上。
2.prev=current,
如果头指针不为空,也就是链表不为空,那么把这个结点串到当前结点,也就是尾结点,如果头指针为空,那当前结点就是头结点。
3.current=current->next
相当于在遍历链表

weixin_36617477
大峰98 您好,我是刚刚链表问题的题主,我的程序有问题,在控制台成功输出title与rating后会突然中断,我觉得是清内存那段代码错了,改成了这样 //清内存current=head; while(current!=NULL ) { temp=current; current=current->next; free(temp); }puts("OK!");但是还是会中断,能告诉我为什么吗?
大约 3 年之前 回复
weixin_36617477
大峰98 答得很完美,理解了,非常感谢
大约 3 年之前 回复

第三步"3.current=current->next"应该是更新current指向下一个节点吧?不只是值,里面的next指针也变成下个节点的指针。不知道理解有没有问题

weixin_36617477
大峰98 您好,我是刚刚链表问题的题主,我的程序有问题,在控制台成功输出title与rating后会突然中断,我觉得是清内存那段代码错了,改成了这样 //清内存current=head; while(current!=NULL ) { temp=current; current=current->next; free(temp); }puts("OK!");但是还是会中断,能告诉我为什么吗?
大约 3 年之前 回复
weixin_36617477
大峰98 也就是说需要考虑的不仅是地址值的传递,而且其结构体变量内部的结构体指针也在不断更新是吧?
大约 3 年之前 回复
u010264163
慕兰 对的
大约 3 年之前 回复
struggle_for_dream
温良岁月 current=current->next,这句只是在遍历,如果没有其他操作对链表没有丝毫影响,当然你可以在遍历的过程中加入其他操作。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问