链表初始化

#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,的原因是什么?

你可能感兴趣的:(链表,初始化)