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 }

 

posted @ 2020-05-04 16:07  幻想Elapse  阅读(430)  评论(0编辑  收藏  举报