• 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 }
  • 相关阅读:
    关于Java中System.currentTimeMillis和System.nanoTime的错误认识
    多线程以外
    vim 小技巧
    Virtual Box HostOnly网络模式配置
    How 30 Minutes a Day Can Increase Your Intelligence
    YUM命令使用
    Hash算法及其应用
    jetty + apache httpd 反向代理配置
    使用SCTP优化网络
    .NET书籍推荐
  • 原文地址:https://www.cnblogs.com/2020R/p/12826896.html
Copyright © 2020-2023  润新知