已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。
输入样例:
1 3 5 -1
2 4 6 8 10 -1
输出样例:
1 2 3 4 5 6 8 10
代码
#include <bits/stdc++.h> using namespace std; typedef struct LNode{ int date; struct LNode *next; }LNode,*LinkList; LinkList read() { LNode*op,*l; l = new LNode; l->next = NULL; l->date = -1; op = l; int date; cin>>date; while(date!=-1) { LNode *p; p = new LNode; p->date = date; p->next = NULL; op->next = p; op = op->next; cin>>date; } return l; } void print(LinkList l) { LNode *p = l; p = l->next; int flag = 1; while(p) { flag = 0; cout<<p->date; p = p->next; if(p) cout<<" "; } if(flag) cout<<"NULL"; } LinkList merge(LinkList l1,LinkList l2) { LNode *p1,*p2; p1 = l1->next; p2 = l2->next; LinkList l3; l3 = new LNode; l3->next=NULL; LNode *q = l3; while(p1 && p2) { if(p1->date < p2->date) { q->next = p1; p1 =p1->next; } else{ q->next =p2; p2 =p2->next; } q = q->next; } if(p1) q->next = p1; else q->next = p2; return l3; } int main() { LinkList l1,l2,l3; l1 = read(); l2 = read(); l3 = merge(l1,l2); print(l3); }