7-51 两个有序链表序列的合并 (20分)
1 #include <iostream> 2 using namespace std; 3 typedef struct node 4 { 5 int id; 6 struct node* next; 7 }*L; 8 int main() 9 { 10 L l1=NULL, l2=NULL, l3=NULL;//三个链表 11 int cnt = 0;//结点总数 12 int in;//输入的数据 13 L p = NULL;//临时保存链表头 14 while (1) 15 { 16 scanf("%d",&in); 17 if (in == -1)break; 18 cnt++; 19 if (NULL == l1) 20 { 21 l1 = new struct node; 22 l1->id = in; 23 l1->next = NULL; 24 p = l1; 25 } 26 else 27 { 28 struct node* s = new struct node; 29 s->next = NULL; 30 s->id = in; 31 l1->next = s; 32 l1=l1->next; 33 } 34 } 35 l1=p; 36 while (1) 37 { 38 cin >> in; 39 if (in == -1)break; 40 cnt++; 41 if (NULL == l2) 42 { 43 l2 = new struct node; 44 l2->id = in; 45 l2->next = NULL; 46 p=l2; 47 } 48 else 49 { 50 struct node* s = new struct node; 51 s->next = NULL; 52 s->id = in; 53 l2->next = s; 54 l2 = l2->next; 55 } 56 } 57 l2=p; 58 p=NULL; 59 for (int i = 0; i < cnt; i++) 60 { 61 struct node* s = new struct node; 62 s->next = NULL; 63 if (!l3) 64 { 65 l3= s; 66 p = l3; 67 } 68 else 69 { 70 l3->next = s; 71 l3=l3->next; 72 } 73 } 74 l3 = p; 75 while (l1 || l2) 76 { 77 if (((l1 && l2) &&(l1->id < l2->id)) || (l1 && !l2)) 78 { 79 l3->id = l1->id; 80 printf("%d", l3->id); 81 l1 = l1->next; 82 l3 = l3->next; 83 } 84 else if (((l1 && l2) && (l1->id >= l2->id)) || (!l1 && l2)) 85 { 86 l3->id = l2->id; 87 printf("%d", l3->id); 88 l2 = l2->next; 89 l3 = l3->next; 90 } 91 if (NULL != l2 || NULL != l1) 92 printf(" "); 93 } 94 l3 = p; 95 if (!l3)printf("NULL"); 96 return 0; 97 }