7-51 两个有序链表序列的合并 (20 分)
题目链接:7-51 两个有序链表序列的合并 (20 分)
代码
#include <iostream>
using namespace std;
struct node
{
int val;
node *next;
node():val(0), next(NULL) {}
node(int x): val(x), next(NULL) {}
node(int val, node *next):val(val), next(next){}
};
typedef node *ListNode;
void creat(ListNode dummy) {
int x;
node *cur = dummy;
while (cin >> x && x != -1) {
ListNode t = new node(x);
cur->next = t;
cur = t;
}
}
ListNode merge (ListNode s1, ListNode s2) {
ListNode s = new node();
node *p = s;
node *p1 = s1->next;
node *p2 = s2->next;
while (p1 && p2) {
if (p1 -> val < p2 -> val) {
p->next = p1;
p = p1;
p1 = p1->next;
}
else {
p->next = p2;
p = p2;
p2 = p2->next;
}
}
p->next = p1 == NULL ? p2 : p1;
return s;
}
void print(ListNode head) {
node *cur = head;
cout << head->val;
cur = cur->next;
while (cur) {
cout << " " << cur->val;
cur = cur->next;
}
}
int main(int argc, const char** argv) {
ListNode head1 = new node(), head2 = new node();
creat(head1);
creat(head2);
ListNode res = merge(head1, head2);
if (! res->next)
cout << "NULL" << endl;
else
print(res->next);
return 0;
}