7-52 两个有序链表序列的交集 (20分)

最后一个测试点超时

 

 1 #include <iostream>
 2 #include <vector>
 3 #include <string>
 4 using namespace std;
 5 int main()
 6 {
 7     vector<int>l1, l2, l3;
 8     while (1)
 9     {
10         int in;
11     scanf("%d",&in);
12         if (in == -1)
13             break;
14         l1.push_back(in);
15     }
16     while (1)
17     {
18         int in;
19         scanf("%d",&in);
20         if (in == -1)
21             break;
22     l2.push_back(in);
23     for (int i = 0; i < l1.size(); i++)
24     {
25       if(in == l1[i])
26       {
27         l3.push_back(l1[i]);
28                 if (l3.size() == 1)printf("%d",l1[i]);
29                 else printf(" %d",l1[i]);
30             }
31     }
32     }
33     if (l1.empty() || l2.empty() || l3.empty())
34     {
35         cout << "NULL";
36     }
37 }

 

 

 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     int flag = 0;
58     l2 = p;
59     L p3 = NULL;
60     L p2 = NULL;
61     if (!l1)flag = 1;
62     if (!l2)flag = 1;
63     while (l1)
64     {
65         if (!l2)break;
66         p2 = l2;
67         while (l2)
68         {
69             if (l2->id == l1->id)
70             {
71                 if (!l3)
72                 {
73                     l3 = new struct node;
74                     l3->next = NULL;
75                     l3->id = l2->id;
76                     printf("%d", l3->id);
77                     p3 = l3;
78                 }
79                 else
80                 {
81                     l3->next = new struct node;
82                     l3->next->id = l2->id;
83                     l3->next->next = NULL;
84                     l3 = l3->next;
85                     printf(" %d", l3->id);    
86                 }
87             }            
88                 l2 = l2->next;
89         }
90         l2 = p2;
91         l1 = l1->next;
92     }
93     if(flag || !p3)
94     printf("NULL");
95     return 0;
96 }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值