單鏈表之尾插法

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;
    }
}

看沒看懂都點個讚唄~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章