1、前言:
尾插法,藉助尾指針r,相當於媒婆,將原節點與新增節點P相連接,相比於頭插法的好處是輸入與輸出順序一致,如輸入12345,輸出也是12345
2、實現原理:
1、從一個空鏈表L開始,藉助尾指針將新節點逐個插入到鏈表的尾部,尾指針r始終指向鏈表的尾節點。
2、初始時,r與L均指向頭節點L,然後當有新增節點插入時,將新節點插入到尾節點後,然後r再次指向新節點。
3、描述成一個故事:就是r相當於一個年輕漂亮的媒婆(這個媒婆永遠年輕並且可以既可以扮成男性又可以扮成女性),然後負責將新增節點新P介紹給老太婆L(最初是L,從第二個節點開始是舊P),因爲舊P是個上了年紀的老太婆,而新P則是個年輕的小夥子,老太婆肯定吸引不了年輕的小夥子,所以這時候媒婆r的作用就出現了,r首先是冒充老太婆舊P,然後以舊P的名字去吸引小夥子新P,小夥子一看,這小娘子真漂亮,於是便從了她,可當他成親的時候才發現,臥槽,怎麼是個老太婆,於是心生怨恨,等到老太婆死後,當初的小夥子(新P)也變成了現在的老漢(舊P),於是也故技重施,讓r代替他去勾引年輕的小娘子(新P),這個過程用代碼描述就是:
P -> next = r; //媒婆r將舊p與新P連接起來
P=r; // 故技重施
3、實現代碼:
#include<stdio.h>
#include <stdlib.h>
//define a struct
//定義一個結構體,也就是節點
typedef struct Node {
int data; // 存儲鏈表數據
struct Node *next; // 存儲結點的地址
}LNode,*LinkList;
//鏈表頭插法
LNode* List_TailInsert(LNode *L,int a[],int n){
L = (LNode*)malloc(sizeof(LNode)); //malloc必須是指針類型 void *__cdecl malloc(size_t _Size);
L->next=NULL;
LNode *r; //創建尾指針
LNode *P;//創建新增節點P
r = (LNode*)malloc(sizeof(LNode));//爲尾指針開闢一塊內存
r=L;//最初r與L都指向L且L->next=Nu=ULL;
for(int i=0;i<n;i++){
P = (LNode*)malloc(sizeof(LNode));//爲新增節點開闢一塊內存
P->data = a[i];
r->next = P;
r=P;
}
r->next=NULL;//最終尾節點的指向爲NULL
return L;
}
//主函數,給鏈表賦值並打印出鏈表
void main(){
int arr[] = {1,2,3,4,5};
int n = 5;
LNode *L = NULL;
L = List_TailInsert(L,arr,n);
while(L->next!=NULL){
printf(" %d ",L->next->data);//算上頭節點一共六個節點,並且頭節點數據域爲NULL,所以輸出的第一個值應該爲 L->next->data
L = L->next;
}
}
看沒看懂都點個讚唄~~~