| 
              #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;
 }
 |