链表中间插入

  1. #include <stdlib.h>  
  2.   
  3. struct node  
  4. {  
  5.     int num;  
  6.     struct node * next;  
  7. };  
  8.   
  9. typedef struct node Node;  
  10. typedef struct node * Link;  
  11.   
  12. void create_link(Link * head)  
  13. {  
  14.     *head = NULL;  
  15. }  
  16.   
  17. void insert_node_head(Link * head,Link new_node)  
  18. {  
  19.     new_node->next = *head;  
  20.     *head = new_node;  
  21. }  
  22.   
  23. void display_node(Link head)  
  24. {  
  25.     Link tmp;  
  26.     tmp = head;  
  27.   
  28.     while(tmp != NULL)  
  29.     {  
  30.         printf("num = %d\n",tmp->num);  
  31.         tmp = tmp->next;  
  32.     }  
  33. }  
  34.   
  35. void is_malloc_ok(Link new_node)  
  36. {  
  37.      if(new_node == NULL)  
  38.     {  
  39.         printf("malloc error!\n");  
  40.         exit(-1);  
  41.         }  
  42. }  
  43.   
  44. void create_newnode(Link * new_node)  
  45. {  
  46.     *new_node = (Link) malloc(sizeof(Node));  
  47.     is_malloc_ok(*new_node);  
  48. }  
  49.   
  50. void insert_node_tail(Link *head,Link new_node)  
  51. {  
  52.     Link tmp;  
  53.   
  54.     tmp = *head;  
  55.   
  56.     if(*head == NULL)  
  57.     {  
  58.         new_node->next = *head;  
  59.         *head = new_node;  
  60.     }  
  61.     else   
  62.     {  
  63.         while(tmp->next != NULL)  
  64.         {  
  65.             tmp = tmp->next;  
  66.         }  
  67.         tmp->next = new_node;  
  68.         new_node->next = NULL;  
  69.     }  
  70. }  
  71.   
  72. void insert_node_mid(Link *head,Link new_node,int num)  
  73. {  
  74.     Link tmp;  
  75.     tmp = *head;  
  76.       
  77.     if(NULL == *head)  
  78.     {  
  79.         printf("link is empty!\n");  
  80.         return;  
  81.     }  
  82.     else  
  83.     {  
  84.         while(tmp->num != num && tmp->next != NULL)  
  85.         {  
  86.             tmp = tmp->next;  
  87.         }  
  88.         if(tmp->num == num)  
  89.         {  
  90.             new_node->next = tmp->next;  
  91.             tmp->next = new_node;  
  92.         }  
  93.         else  
  94.         {  
  95.             printf("no such node!\n");  
  96.         }  
  97.     }  
  98.   
  99. }  
  100.   
  101.   
  102. int main()  
  103. {  
  104.     Link head = NULL;  
  105.     Link new_node = NULL;  
  106.     int i;  
  107.     int num;  
  108.   
  109.     create_link(&head);  
  110.   
  111.     for(i = 0; i < 10;i++)  
  112.     {  
  113.         create_newnode(&new_node);  
  114.         new_node->num = i;  
  115.         //insert_node_head(&head,new_node);  
  116.         insert_node_tail(&head,new_node);  
  117.     }  
  118.   
  119.     printf("please input a num!\n");  
  120.     scanf("%d",&num);  
  121.   
  122.     create_newnode(&new_node);  
  123.     new_node->num =  num;  
  124.   
  125.     insert_node_mid(&head,new_node,10);  
  126.   
  127.     display_node(head);  
  128.     return 0;</span>  
  129. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值