正向创建单向链表(三种方法)及输出各个结点的值

#include<stdio.h>
#include<stdlib.h>
#define N 10
//定义结构体单元 
typedef struct node{
	int data;//结构体数据域 
	struct node* next;//结构体指针域 
}ElemSN;

//正向创建单向链表(方法一,先创建头结点) 
/*
ElemSN* CreatLink(int a[],int n)
{
	ElemSN *head,*tail,*p;
	//创建头结点
	head=tail=(ElemSN*)malloc(sizeof(ElemSN));
	head->data=a[0];
	head->next=NULL;
	//创建后面的结点
	for(int i=1;i<n;i++)
	{
		p=(ElemSN*)malloc(sizeof(ElemSN));
		p->data=a[i];
		p->next=NULL;
		tail->next=p;
		tail=p;
	 }
	 return head;
 } */
 
 //创建单向链表方法二(不需要先创建头结点)
 /* 
 ElemSN* CreatLink(int a[],int n)
 {
 	ElemSN *p,*tail,*head=NULL; 
 	for(int i=0;i<n;i++)
 	{
 		p=(ElemSN*)malloc(sizeof(ElemSN));
 		p->data=a[i];
 		p->next=NULL;
 		if(!head)
 		head=tail=p;//如果创建的结点是第一个结点,令head=tail=p 
 		else
 		tail=tail->next=p;
	 }
	 return head;
  } 
  */
  
  //创建单向链表方法三(不需要 p 指针) 
  ElemSN* CreatLink(int a[],int n)
  {
  	ElemSN *head,*tail;
  	head=tail=(ElemSN*)malloc(sizeof(ElemSN));
  	head->data=a[0];
  	head->next=NULL;
  	for(int i=1;i<n;i++)
  	{
	  tail=tail->next=(ElemSN*)malloc(sizeof(ElemSN));
	  tail->data=a[i];
	  tail->next=NULL;	
	  }
	  return head;
  }
  
 void PrintLink(ElemSN* head)
 {
 	ElemSN *p=head;
 	for(;p;p=p->next)
 	printf("%5d",p->data);
 }
 
 int main(void)
 {
 	ElemSN *head;
 	int a[N]={3,2,5,8,4,7,6,9,0,1};
 	head=CreatLink(a,N);
 	PrintLink(head);
 }

猜你喜欢

转载自blog.csdn.net/qq_39241239/article/details/80878878