链表 问题 ,欲求高人!!

来源:百度知道 编辑:UC知道 时间:2024/05/17 21:57:19
今天上机,为了一个等式用了我一个下午的时间。

现在还是不懂,向高手请教下。

创建链表:

struct node *creat(struct node *head)

{

int n;

struct node *p1=NULL,*p2=NULL;

printf("\n Please input a integer(>0),if input -1 then exit:\n");

scanf("%d",&n);

while(n>0)

{

p1=(struct node*)malloc(sizeof(struct node));

p1->num=n;

p1->next=NULL;

if(head==NULL)

head=p1;

else

p2->next=p1;

p2=p1;

scanf("%d",&n);

return head;

}

这只是其中的一部分,也就是插入链表。

我不明白的是,那个

p2=p1;

应该怎么解释?

在我的理解里面是,将p1赋给p2的话,那么p2不是就被p1给覆盖了吗?

那么再运行循环语句的时候就没有意义了。

当然,我的理解应该是错误的,但是,到底如何理解,欲求高人。

要把这两句话联系来看
1. p2->next=p1;
2. p2=p1;

第一句使得p2节点的下一个接点是p1
然后,p2=p1就是让p2指向p1现在指向的位置,也就是第一句话中的(刚才的)p2节点的下一个接点是p1