鱼C论坛

 找回密码
 立即注册
查看: 967|回复: 4

[已解决]关于链表指针的理解求解答

[复制链接]
发表于 2020-3-6 10:45:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
for(i=1;i<=n;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;
        q=p;
    }
具体就是这一段我有点儿难理解,在q->next = p后又q = p  这样的操作不就是让两个指针都指向了p指向的值嘛,而且下一次循环进来的话会是怎么样的保存呢?q的值不是没次都被覆盖了嘛?怎么还能到达保存的目的呢?有点儿不理解求大佬们解释解释。
最佳答案
2020-3-6 12:58:06
本帖最后由 4goodworld 于 2020-3-6 13:03 编辑

其实这个制造过程给人感觉混乱的原因是,因为有了循环看不太清楚,我把循环的代码改成这样,你再琢磨下
//第一次
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;
        q=p;
//第二次
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;
然后,我们按照理解重新构造下,或许你会更方便的理解
  
        q=p;
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;


q=p;                 //此时的p你把它理解为熊大,q=p,是不是q也是熊大
中间有一段操作 // 制作熊二的过程
q->next=p;      //此时的p,你把它理解为熊二,熊大的next为熊二,合不合理?
最后,其实你这个创建链表的过程还差一个创建头部的代码,如果把头部Head加起来,你就看得完整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-6 11:01:41 | 显示全部楼层
q->next=p就是让q指向新开辟的内存空间
q=p 让q移到新开辟内存的地址
下一次循环q->next又能指向新开辟的空间
就像一个箭头指向一个新的箭头,要移动到新的箭头才能指向下一个新的箭头,把存储的数据都连接起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 12:58:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-3-6 13:03 编辑

其实这个制造过程给人感觉混乱的原因是,因为有了循环看不太清楚,我把循环的代码改成这样,你再琢磨下
//第一次
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;
        q=p;
//第二次
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;
然后,我们按照理解重新构造下,或许你会更方便的理解
  
        q=p;
        p=(LinkList)malloc(sizeof(LNode));
        printf("请输入第%d个元素的值:",i);
        scanf("%d",&(p->data));
        p->next=NULL;
        q->next=p;


q=p;                 //此时的p你把它理解为熊大,q=p,是不是q也是熊大
中间有一段操作 // 制作熊二的过程
q->next=p;      //此时的p,你把它理解为熊二,熊大的next为熊二,合不合理?
最后,其实你这个创建链表的过程还差一个创建头部的代码,如果把头部Head加起来,你就看得完整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 17:27:04 | 显示全部楼层
4goodworld 发表于 2020-3-6 12:58
其实这个制造过程给人感觉混乱的原因是,因为有了循环看不太清楚,我把循环的代码改成这样,你再琢磨下

...

谢谢!非常感谢,很形象哈哈啊哈,我懂了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-6 17:28:00 | 显示全部楼层
兄弟来学习 发表于 2020-3-6 11:01
q->next=p就是让q指向新开辟的内存空间
q=p 让q移到新开辟内存的地址
下一次循环q->next又能指向新开辟的 ...

谢谢!终于打开了我的思路!我懂了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 23:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表