两个链表的连接
重新开始写代码。先从数据结构开始:两上链表的链接(来自经典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 }
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 }

浙公网安备 33010602011771号