结构里的指针不理解

来源:百度知道 编辑:UC知道 时间:2024/05/25 13:51:08
struct node
{int data;
struct node *next;};
typedef struct node AA;/* 建立解构 */
AA *creat()/* 函数 */
{int c;
AA *h,*s,*r;
h=(AA *)malloc(sizeof(AA));/* 分配动态 */
r=h;/* r指向H */
scanf("%d",&c);/* 输入数据 */
while(c!=-1)
{s=(AA *)malloc(sizeof(AA));
s->data=c; /* S是链表的开 */
r->next=s;
r=s;scanf("%d",&c);}
r->next='\0';
return h;}
print_(AA *head)
{AA *p;
p=head->next;

while(p!='\0'){printf("->%d",p->data);
p=p->next;}printf("end");}
main()
{AA *head;

head=creat();
print_(head);
就是r=h;和r=s当r指向h是不是都一样了,这个怎么理解我晕s->data=c; /* S是链表的开 */
r->next=s;
r=s;scanf("%d",&c);}请大家教教菜鸟

h -> [ | -]-> [c|-]-> [c|-]-> ...
^ ^ ^
r --> r --> r --> ...

仔细看图,r就像一个游标一路右移,刚开始r与h都指向头节点,随着新的节点s不断创造出来,r也在随之而变,但是r在任一时刻始终都是指向链表的最后一个节点。当用户输入-1的时候,while循环退出,这个时候r指向的就是你要返回的链表的最后一个节点(注意h在整个过程中始终没变,否则你的链表的头就找不到了)