1. 程式人生 > >給定陣列,建立(帶頭節點)的單鏈表(頭插法、尾插法)

給定陣列,建立(帶頭節點)的單鏈表(頭插法、尾插法)

一般有兩種常用的方法來建立單鏈表:頭插法與尾插法。
(1)頭插法:每次將新申請的節點插在頭節點的後面;
簡單來說,就是把新加進的元素放在表頭後的第一個位置:
首先,讓新節點的next指向頭節點之後;然後,讓表頭的next指向新節點。
(2)尾插法:每次將新申請的節點插在終端節點的後面。

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node *next;
} NODE;


// 尾插法建立單鏈表(帶頭節點)
NODE *createEnd
(int arr[], int len) { NODE *head = (NODE *)malloc(sizeof(NODE)); // 生成頭節點 head->next = NULL; NODE *end = head; // 尾指標初始化 for (int i = 0; i < len; i++) { NODE *p = (NODE *)malloc(sizeof(NODE)); // 為每個陣列元素建立一個節點 p->data = arr[i]; end->next = p; // 將節點p插入到終端節點之後 end = p; } end->next
= NULL; // 單鏈表建立完畢,將終端節點的指標域置空 return head; } // 頭插法建立單鏈表(帶頭節點) NODE *createHead(int arr[],int len) { NODE *head = (NODE *)malloc(sizeof(NODE)); // 初始化一個空連結串列 head->next = NULL; for (int i = len-1; i >= 0; i--) { NODE *p = (NODE *)malloc(sizeof(NODE)); p->data = arr[i]; //
插入第一個節點時,p->next指向head->next,此時為NULL,恰好作為尾節點; p->next = head->next; // 讓新節點的next指向頭節點之後 head->next = p; // 讓表頭的next指向新節點 } return head; } // 單鏈表列印 void print(NODE *head) { if (head == NULL) return; NODE *p = head->next; while (p != NULL) { printf("%d\n", p->data); p = p->next; } } int main(void) { int arr[] = {1,2,3,4,5,6,7}; int len = sizeof(arr)/sizeof(int); NODE *head1 = createEnd(arr, len); NODE *head2 = createHead(arr, len); print(head1); print(head2); return 0; }