02 单链表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02 单链表相关的知识,希望对你有一定的参考价值。
线性表之链式存储---单链表
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 // 数据结构 6 typedef struct node 7 { 8 int data; 9 struct node *next; 10 }linkList; 11 12 // 创建单链表,并初始化 13 linkList *linkList_init(void) 14 { 15 linkList *list = (linkList *)malloc(sizeof(linkList)); 16 17 if (list == NULL) 18 { 19 return NULL; 20 } 21 22 list->next = NULL; 23 24 return list; 25 } 26 27 // 添加到链表头 28 int linkList_add_head(linkList *list, int data) 29 { 30 // 参数检查 31 if (list == NULL) 32 { 33 return -1; 34 } 35 36 linkList *node = (linkList *)malloc(sizeof(linkList)); 37 if (node == NULL) 38 { 39 return -2; 40 } 41 42 node->data = data; 43 node->next = list->next; 44 list->next = node; 45 46 return 0; 47 } 48 49 // 添加到链表尾 50 int linkList_add_tail(linkList *list, int data) 51 { 52 // 参数检查 53 if (list == NULL) 54 { 55 return -1; 56 } 57 58 linkList *node = (linkList *)malloc(sizeof(linkList)); 59 if (node == NULL) 60 { 61 return -2; 62 } 63 64 node->data = data; 65 node->next = NULL; 66 67 // 找到最后一个节点 68 linkList *tmp = NULL; 69 for (tmp = list; tmp->next != NULL; tmp = tmp->next) 70 { 71 ; 72 } 73 74 tmp->next = node; 75 76 return 0; 77 } 78 79 // 从头开始删除第一个节点,并保存到node中 80 int linkList_del_head(linkList *list, linkList **node) 81 { 82 // 参数检查 83 if (list == NULL || list->next == NULL) 84 { 85 return -1; 86 } 87 88 *node = list->next; 89 90 list->next = list->next->next; 91 92 (*node)->next = NULL; 93 return 0; 94 } 95 96 // 从尾部开始删除第一个节点,并保存到node中 97 int linkList_del_tail(linkList *list, linkList **node) 98 { 99 // 参数检查 100 if (list == NULL || list->next == NULL) 101 { 102 return -1; 103 } 104 105 // 记录最后一个节点的前一个节点 106 linkList *tmp = NULL; 107 for (tmp = list; tmp->next->next != NULL; tmp = tmp->next) 108 { 109 ; 110 } 111 112 *node = tmp->next; 113 (*node)->next = NULL; 114 115 tmp->next = NULL; 116 117 return 0; 118 } 119 120 int linkList_printf(linkList *list) 121 { 122 // 参数检查 123 if (list == NULL || list->next == NULL) 124 { 125 return -1; 126 } 127 128 linkList *tmp = NULL; 129 for (tmp = list->next; tmp != NULL; tmp = tmp->next) 130 { 131 printf("%d-", tmp->data); 132 } 133 printf("\\n"); 134 135 return 0; 136 } 137 138 int linkList_destroy(linkList *list) 139 { 140 linkList *tmp = NULL; 141 142 while (list != NULL) 143 { 144 tmp = list; 145 list = list->next; 146 free(tmp); 147 tmp = NULL; 148 } 149 150 return 0; 151 } 152 153 int main(void) 154 { 155 int i = 0; 156 linkList *list = NULL; 157 linkList *node = NULL; 158 159 list = linkList_init(); 160 161 for (i = 0; i < 10; i++) 162 { 163 linkList_add_head(list, i); 164 } 165 166 linkList_printf(list); 167 168 for (i = 0; i < 10; i++) 169 { 170 linkList_add_tail(list, i); 171 } 172 173 linkList_printf(list); 174 175 linkList_del_head(list, &node); 176 printf("node:%d\\n", node->data); 177 free(node); 178 node = NULL; 179 180 linkList_printf(list); 181 182 linkList_del_tail(list, &node); 183 printf("node:%d\\n", node->data); 184 free(node); 185 node = NULL; 186 187 linkList_printf(list); 188 189 linkList_destroy(list); 190 191 return 0; 192 }
以上是关于02 单链表的主要内容,如果未能解决你的问题,请参考以下文章