关于链表指针的理解求解答
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的值不是没次都被覆盖了嘛?怎么还能到达保存的目的呢?有点儿不理解求大佬们解释解释。 q->next=p就是让q指向新开辟的内存空间
q=p 让q移到新开辟内存的地址
下一次循环q->next又能指向新开辟的空间
就像一个箭头指向一个新的箭头,要移动到新的箭头才能指向下一个新的箭头,把存储的数据都连接起来 本帖最后由 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加起来,你就看得完整
4goodworld 发表于 2020-3-6 12:58
其实这个制造过程给人感觉混乱的原因是,因为有了循环看不太清楚,我把循环的代码改成这样,你再琢磨下
...
谢谢!非常感谢,很形象哈哈啊哈,我懂了! 兄弟来学习 发表于 2020-3-6 11:01
q->next=p就是让q指向新开辟的内存空间
q=p 让q移到新开辟内存的地址
下一次循环q->next又能指向新开辟的 ...
谢谢!终于打开了我的思路!我懂了!
页:
[1]