| 
            
            
             
              #include <stdio.h> #include <stdlib.h>
  /* 链表的结构体描述 */ typedef struct chain {     int data;     struct chain *next; } C;
  /* 找到指定节点 */ C *find(C *head, int i) {     C *node = head;     if (node == NULL)         return NULL; // 若头节点为空则退出     while (i--)     {         node = node->next;         if (node == NULL)             return NULL; // 未找到     }     return node; }
  /* 链表节点的插入, 在i的后面插入 */ /* 不能在头节点前插入节点 */ int insert(C *head, int i, int value) {     C *node, *new;     if (i < 0)         return 0;
      node = find(head, i); // 找到插入点     if (node == NULL)         return 0;
      // 创建新节点     new = (C *)malloc(sizeof(C));     if (new == NULL)         return 0;     new->data = value;
      new->next = node->next;     node->next = new;     return 1; }
  /* 链表节点的删除 */ int delete(C* head, int i) {     C *prev, *node;     if (i <= 0)         return 0; // 头节点不可删除     prev = find(head, i - 1);     node = prev->next; // 要删除的节点     if (prev == NULL || node == NULL)         return 0; // 节点不存在
      prev->next = node->next;     free(node);     return 1; }
 
 
 
 
 
 
 
  /* 以下为测试代码 */ void show(C *head) {     C *node;     for (node = head; node != NULL; node = node->next)         printf("%d ", node->data);     putchar('\n'); }
  void destroy(C *head) {     C *node = head->next;     C *p;     while (node != NULL)     {         p = node->next;         free(node);         node = p;     } }
  int main(void) {     C c = {0};     c.data = 15; // 头节点          insert(&c, 0, 73);     insert(&c, 1, -48);     insert(&c, 2, -264);     show(&c);
      insert(&c, 1, 185);     show(&c);     insert(&c, 3, 224);     show(&c);     insert(&c, 5, 1);     show(&c);     insert(&c, 6, 2);     show(&c);
      putchar('\n');     delete(&c, 7);     show(&c);     delete(&c, 3);     show(&c);     delete(&c, 4);     show(&c);          destroy(&c);     return 0; }             
                       |