链表(c语言实现)
节点的数据结构
struct Node { int value; struct Node* next; }; typedef struct Node Node;
操作和演示
#include <stdlib.h> #include <stdio.h>// 建立一个节点 Node *createNode(int value) { Node *pNode = (Node *) malloc(sizeof(Node)); pNode->value = value; pNode->next = NULL; return pNode; } // 建立一个空链表(带头节点) Node *createList() { return createNode(-0x3f3f3f); } // 删除一个节点 void deleteNode(Node *list, int index) { Node *temp = list->next; Node *node = NULL; int count = 1; index -= 1; if (index == 0) { node = list->next; list->next = list->next->next; free(node); return; } while (temp != NULL && count < index) { temp = temp->next; count++; } list = temp; node = list->next; list->next = temp->next->next; // 从链表中摘除 free(node); } // 销毁链表 void destroy(Node *list) { Node *temp = list->next; Node *node = NULL; int count = 1; while (temp != NULL) { node = temp; temp = temp->next; free(node); } free(list); } // 在指定的位置插入一个节点 void insert(Node *list, Node *node, int index) { Node *temp = list->next; int count = 1; index -= 1; if (index == 0) { list->next = node; node->next = temp; return; } while (temp != NULL && count < index) { temp = temp->next; count++; } list = temp; temp = temp->next; list->next = node; node->next = temp; } // 在末尾追加一个节点 void append(Node *list, Node *node) { Node *temp = list->next; if (temp == NULL) { list->next = node; return; } while (temp->next != NULL) temp = temp->next; temp->next = node; } // 显示链表 void showList(Node *list) { Node *temp = list->next; if (list == NULL || temp == NULL) { printf("null\n"); return; } printf("%d", temp->value); temp = temp->next; while (temp != NULL) { printf("->%d", temp->value); temp = temp->next; } printf("\n"); } // 得到一个节点 Node *getNode(Node *list, int index) { Node *temp = list->next; int count = 1; while (temp != NULL && count < index) { temp = temp->next; count++; } return count == index ? temp : NULL; } int main() { Node *list = createList(); Node *pNode = NULL; int i; for (i = 1; i <= 3; i++) { pNode = createNode(i * 10); append(list, pNode); } showList(list); deleteNode(list, 1); showList(list); pNode = createNode(40); insert(list, pNode, 1); showList(list); pNode = getNode(list, 1); printf("%d\n", pNode->value); destroy(list); return 0; }