1. 程式人生 > 其它 >帶結點與不帶結點用頭插法和尾插法建立單鏈表

帶結點與不帶結點用頭插法和尾插法建立單鏈表

一、採用帶有頭結點的頭插法逆向建立單鏈表

Linklist List_HeadInsert1(LinkList &L)  //採用帶有頭結點的頭插法逆向建立單鏈表 
{
	LNode *s;  //宣告一個臨時結點 
	int x;
	L=(LinkList)malloc(sizeof(LNode));  //建立頭結點
	L->next=NULL;  //初始為空連結串列 
	scanf("%d",&x);  //輸入結點的值 
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode));  //建立新結點 
		s->data=x;
		s->next=L->next;  //將新結點插入表中,L為頭指標 
		L->next=s;
		scanf("%d",&x);
	}
	return L;
}

  

二、採用不帶有頭結點的頭插法逆向建立單鏈表

Linklist List_HeadInsert2(LinkList &L)  //採用不帶有頭結點的頭插法逆向建立單鏈表 
{
	LNode *s;  //宣告一個臨時結點 
	int x;
	L=NULL;  
	scanf("%d",&x);  //輸入結點的值 
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode));  //建立新結點 
		s->data=x;
		if(L==NULL)  // 若第一次建立節點,則將該點設定為頭節點
		{
			L=s;
			s->next=NULL;
		 } 
		else{  // 若不是第一次建立節點,則直接將新節點接到連結串列頭
			s->next=L;
			L=s;
		}
		scanf("%d",&x);
	}
	return L;
}

  

三、採用帶有頭結點的尾插法正向建立單鏈表

Linklist List_TailInsert1(LinkList &L)  //採用帶有頭結點的尾插法正向建立單鏈表 
{
	LNode *s,*r;  //s為臨時結點,r為表尾指標 
	int x;
	L=(LinkList)malloc(sizeof(LNode));  //建立頭結點
	L->next=NULL;  //初始為空連結串列 
	r=L;
	scanf("%d",&x);  //輸入結點的值 
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode));  //建立新結點 
		s->data=x;
		r->next=s;
		r=s;  //r指向新的表尾結點 
		scanf("%d",&x);
	}
	r->next=NULL;  //尾結點指標為空 
	return L;
}

  

四、用不帶有頭結點的尾插法正向建立單鏈表

Linklist List_TailInsert2(LinkList &L)  //採用不帶有頭結點的尾插法正向建立單鏈表 
{
	LNode *s,*r;  //s為臨時結點,r為表尾指標 
	int x;
	L=NULL;  
	r=L;
	scanf("%d",&x);  //輸入結點的值 
	while(x!=9999)
	{
		s=(LNode*)malloc(sizeof(LNode));  //建立新結點 
		s->data=x;
		if(L==NULL)  // 建立連結串列的第一個節點
		{
			L=s;
			r=s;
			s->next=NULL;
		 } 
		else{
			r->next=s;
			r=s;
		}
		scanf("%d",&x);
	}
	r->next=NULL;  //尾結點指標為空 
	return L;
}