两个链表的连接

重新开始写代码。先从数据结构开始:两上链表的链接(来自经典100例的改进)

  1 #include <stdlib.h>
  2 #include <stdio.h>
  3 
  4 //#define NUM 5
  5 
  6 struct list
  7 {
  8     int data;
  9     struct list *next;
 10 };
 11 
 12 //typedef struct list node;
 13 //typedef struct node *link;
 14 
 15 typedef struct list node;
 16 
 17 //typedef  node *link;                               //这样也行的。
 18 typedef struct list *link;
 19 
 20 //删除一个结点
 21 link delete_node(link pointer,link tmp)
 22 {
 23     link del;
 24     if(tmp==NULL)//删除第一个
 25     {
 26         del = tmp;
 27         free(del);
 28         return pointer->next;
 29     }
 30     //return pointer;
 31 
 32     else
 33     {
 34         if(tmp->next->next==NULL)//delete the last;
 35         {
 36             free(tmp->next);
 37             tmp->next = NULL;
 38         }
 39         else//delete other
 40         {
 41             del=tmp->next;
 42             //free(del);
 43             tmp->next = tmp->next->next;
 44             free(del);
 45         }
 46         return pointer;
 47     }
 48 
 49 }
 50 
 51 //从小到大输出并且删除
 52 void selection_sort(link pointer,int num)
 53 {
 54     link tmp,btmp;
 55     int i,min;
 56     for(i=0;i<num;i++)
 57     {
 58         tmp=pointer;
 59         min=tmp->data;
 60         btmp=NULL;
 61         while(tmp->next)
 62         {
 63             if(min>tmp->next->data)//这里可以访问到最后的元素。
 64             {
 65                 min=tmp->next->data;
 66                 btmp = tmp;
 67             }
 68             tmp = tmp->next;
 69         }
 70 
 71         /*    if(min>tmp->data)//应该加的链尾的判断。
 72             {
 73             min = tmp->data;
 74             btmp = tmp;
 75             }*/
 76         printf("\40%d",min);
 77         pointer=delete_node(pointer,btmp);
 78     }
 79     printf("\n");
 80 }
 81 
 82 //创建链表
 83 link create_list(int array[],int num)
 84 {
 85     link tmp1,tmp2,pointer;
 86     int i;
 87     pointer =(link)malloc(sizeof(node));
 88     pointer->data = array[0];
 89     tmp1 = pointer;
 90     for(i=1;i<num;i++)
 91     {
 92         tmp2 = (link)malloc(sizeof(node));
 93         tmp2 -> next = NULL;
 94         tmp2->data = array[i];
 95         tmp1->next = tmp2;
 96         tmp1=tmp1->next;
 97         //tmp2->next = NULL;
 98     }
 99 
100     return pointer;
101 
102 }
103 
104 //  连接两个链表。
105 link concatenate(link pointer1,link pointer2)
106 {
107     link temp = pointer1;
108 
109     while(temp->next!=NULL)
110         temp=temp->next;
111 
112     temp->next = pointer2;
113     return pointer1;
114 }
115 
116 int main()
117 {
118     int arr1[]={3,12,8,9,11};
119     int arr2[]={5,4,2,1};
120     link ptr1,ptr2;
121 
122     //建立两个链表。
123     ptr1 = create_list(arr1,5);
124     //selection_sort(ptr1,5);
125     ptr2 = create_list(arr2,4);
126 
127     //连接
128     concatenate(ptr1,ptr2);
129     selection_sort(ptr1,9);
130 
131     return 0;
132 }

 

 

posted @ 2012-04-27 06:48  zhengmian  阅读(900)  评论(0)    收藏  举报