#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Node
{
int vual;
struct Node *link;
};
void init(Node **Plink);
int create(Node **plink);
int insert(Node *plink);
int print(Node *plink);
int main()
{
Node *number;
init(&number);
print(number);
create(&number);
print(number);
return 1;
}
void init(Node **Plink)
{
*Plink = NULL;
printf("初始化结束!\n");
}
int print(Node *plink)
{
if (NULL == plink)
{
printf("链表为空!\n");
return 0;
}
while (NULL != plink)
{
printf("vual = %d\n",plink->vual);
plink = plink->link;
}
printf("\n");
return 1;
}
int create(Node **plink)
{
Node *p1;
Node *p2;
p1=p2=(Node *)malloc(sizeof(Node)); //申请新节点
if(p1 == NULL || p2 ==NULL)
{
printf("内存分配失败\n");
exit(0);
}
memset(p1,0,sizeof(Node));
int i;
p1->vual=0; //输入新节点
p1->link = NULL; //新节点的指针置为空
for (i=1; i<5; i++)
{
if(*plink == NULL) //空表,接入表头
{
*plink = p1;
}
else
{
p2->link = p1; //非空表,接入表尾
}
p2 = p1;
p1=(Node *)malloc(sizeof(Node)); //再重申请一个节点
if(p1 == NULL || p2 ==NULL)
{
printf("内存分配失败\n");
exit(0);
}
memset(p1,0,sizeof(Node));
p1->vual = i*5;
p1->link = NULL;
}
return 1;
}
链表创建是初始化,产生两个疑问
一、为什么要用两个Node指针,把为什么不能把p2->link = p1;p2 = p1;换成plink->link = p1;plink = p1呢?
二、for运行第一次时,p1同时给p2个plink,的原因是什么?