無需遍歷連結串列節點資料尾插
阿新 • • 發佈:2022-04-20
無需遍歷的連結串列尾插法
由於課程需要運用連結串列的相關知識
便在中國大學慕課(https://www.icourse163.org/course/ZJU-9001)以及嗶哩嗶哩(https://www.bilibili.com/video/BV1sJ411E7St?share_source=copy_web)
中查找了相關的視訊,其中於翁愷老師課程的視訊中發現了這一方法,個人覺得比較簡便,於是寫了出來
程式碼如下:
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 // 用於忽略(消除)Visual Studio中的警告
5 #pragma warning(disable:4996)
6
7 typedef struct tagNode {
8 int value;
9 struct tagNode* next;
10 }Node;
11
12 typedef struct {
13 Node* head;
14 Node* tail;
15 }List;
16
17 /*
18 * 尾插法插入資料,構成連結串列
19 */
20 void NodeTailInsert(List* head, int number);
21
22 int main() {
23
24 // 定義一個連結串列list和數number
25 List list;
26 int number;
27
28 // 初始化連結串列
29 list.head = NULL;
30 list.tail = NULL;
31
32 do {
33 scanf("%d", &number);
34 if (number != -1) {
35 NodeTailInsert(&list, number);
36 }
37 } while (number != -1);
38
39 return 0;
40 }
41
42
43 void NodeTailInsert(List* pList, int number)
44 {
45 // 為新節點申請記憶體
46 Node* data = (Node*)malloc(sizeof(Node));
47
48 // 檢查記憶體申請是否失敗
49 if (data == NULL) {
50 exit(0);
51 }
52
53 data->value = number;
54 data->next = NULL;
55
56 // 判斷tail是否為空
57 if (pList->tail != NULL) {
58 pList->tail->next = data;
59 }
60 else {
61 pList->head = data;
62 }
63
64 // 將data的地址賦值給tail,使的tail始終指向最新的尾結點
65 pList->tail = data;
66
67 }
68
69 // 11 12 13 14 15 -1
70 // 測試資料
View Code
因筆者初學C語言,如有錯誤之處,歡迎在評論區指出
(媽耶,這排版真醜)
2022-04-20
20:11:27