链表 问题 ,欲求高人!!
来源:百度知道 编辑: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给覆盖了吗?
那么再运行循环语句的时候就没有意义了。
当然,我的理解应该是错误的,但是,到底如何理解,欲求高人。
现在还是不懂,向高手请教下。
创建链表:
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