建立单向链表

#include <stdio.h>
#include <stdlib.h>
#define NULL 0

struct Node
{
	int Data;
	struct Node *next;
};

int N;//记录结点的个数 
struct Node *Creat(struct Node *head);
void Print(struct Node *head); 

int main()
{ 
	struct Node *head;//创建一个头结点 
	head=NULL;//将头结点设置为不指向任何节点 
    head=Creat(head);//创建链表 
	Print(head); //输出链表 
	return 0;
}

struct Node *Creat(struct Node *head)
{
	N=0;
	struct Node *p1,*p2;//创建两个指向struct Node类型的指针 ,设定p1指向新开辟的结点,p2指向最后一个结点 
	p1=p2=(struct Node*)malloc(sizeof(struct Node));//给第一个结点开辟内存空间,这时候结点的个数为1,,所以让p1和p2都指向它 
	scanf("%d",&p1->Data);//输入第一个数据 
	while(p1->Data!=0)//如果该数据不等于0继续下面的操作,如果等于0表示链表输入结束 
	{
		N++;//结点个数加1
		if(N==1)head=p1;//如果n=1也就是说在第一个结点的时候,我们要把头指针也指向第一个结点 
		else 
		{
		//如果n>1,比如n=2的时候,此时P2指向还是第一个结点,而p1指向新的结点,那我们要把它们串联起来形成一个链式,即p2的下个结点是p1新开的结点 
		  p2->next=p1;
		  p2=p1;//改变指针位置,按照之前的设定,我们要把p2指向最后一个结点,也就是p1新开的结点 
		}
		p1=(struct Node*)malloc(sizeof(struct Node));//创建一个新结点,让p1指向它 
        scanf("%d",&p1->Data); //输入数据 
	}
	p2->next=NULL;//链表结束了要将最后一个结点的指针next设置为不指向任何节点 
	return head;//返回头结点,由头结点可以牵出一条链 
}

void Print(struct Node *head)
{
	struct Node *temp;
	printf("Now,These %d records are:\n",N);
	temp=head;
	while(temp!=NULL)
	{
		printf("%d ",temp->Data);
		temp=temp->next;  
	} 
}

链表创建好了,那表头就不要动了

在创建链表时,最后一次循环中,P1里虽然存入了数据,但这个数据本身只作为链表结束的标志,所以不在链表之中

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值