链表的基本操作 从头部插入 尾部插入 中间插入 删除节点

2013-04-22

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 struct node
  5 {
  6     int num;
  7     struct node *next;
  8 };
  9 void creat(struct node **head)
 10 {
 11     *head = NULL;
 12 }
 13 void insert_node(struct node **head,struct node **newnode) //建立链表遍历
 14 {
 15     if(*head == NULL)
 16     {
 17         (*newnode)->next = NULL;
 18         *head = *newnode;
 19     }
 20     else
 21     {
 22         (*newnode)->next = *head;
 23         *head = *newnode;
 24     }
 25 }
 26 
 27 void display( struct node **head)     //显示脸表遍历
 28 {
 29     struct node *temp = *head;
 30     while(temp != NULL)
 31     {
 32         printf("%d\t",temp->num);
 33         temp = temp->next;
 34     }
 35 }
 36 
 37 int insert_tail(struct node **head,struct node  **newnode)  //尾部插入
 38 {
 39     struct node *temp = *head;
 40     if(*head == NULL)
 41     {
 42         (*newnode)->next =NULL;
 43         *head = *newnode;
 44     }
 45     else
 46     {
 47         while(temp->next != NULL)
 48         {
 49             temp = temp->next;
 50         }
 51         temp->next = *newnode;
 52         (*newnode)->next = NULL;
 53         return 0;
 54     }
 55 
 56 }
 57 
 58 int  insert_mid( struct node **head , struct node **newnode , int num ) 
 59 {
 60     struct node *temp = *head;
 61     while(temp != NULL)
 62     {
 63         if(temp->num == num)
 64         {
 65             (*newnode)->next = temp->next;
 66             temp->next = *newnode;
 67             return 0;
 68         }
 69         temp = temp->next;
 70     }
 71     printf("not find %d",num);
 72 
 73 }
 74 
 75 int delete(struct node **head,int num)
 76 {
 77     if( (*head)->num == num )  //delete head
 78     {
 79         *head=(*head)->next;
 80         return 0;
 81     }
 82     else
 83     {
 84         struct node *temp = *head;
 85         struct node *ptr =NULL;
 86         while(temp != NULL)
 87         {
 88             if(temp->num == num)
 89             {
 90                  ptr->next = temp->next;
 91                  free(temp);
 92                  return 0;
 93             }
ptr = temp; 95 temp = temp->next; 96 } 97 printf("not find %d ,delete fail !!!\n",num); 98 exit(1); 99 } 100 } 101 int main() 102 { 103 int i = 0; 104 struct node *head; 105 creat(&head); 106 struct node *newnode; 107 for(i = 0;i < 10;i++) 108 { 109 newnode = (struct node *)malloc(sizeof(struct node)); 110 newnode->num = i + 1; 111 insert_tail(&head,&newnode); 112 } 113 newnode = (struct node *)malloc(sizeof(struct node)); 114 newnode->num = 12; 115 //insert_mid(&head,&newnode,10); 116 delete(&head,'a'); 117 display(&head); 118 printf("\n"); 119 return 0; 120 }

 

posted @ 2013-04-22 21:39  菜鸟上路ING  阅读(425)  评论(0编辑  收藏  举报