Description
假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序
int LL_merge(ListNode *La, ListNode *Lb)
Input
第1行先输入n表示有n个数据,接着输入n个数据
第2行先输入m表示有M个数据,接着输入m个数据
Output
输出合并后的单链表数据,数据之间用空格隔开
Sample
AC代码:
//请勿直接复制粘贴,答案仅供参考
#include<iostream>
using namespace std;
#define ok 0
#define error -1// 链表结点定义
class ListNode
{
public:int data;ListNode* next;ListNode() { next = NULL; }
};
// 带头结点的单链表类定义
class LinkList
{
public:ListNode* head;int len;// 操作定义LinkList();void LL_set(int i) {len = i;int item;ListNode* p;p = head;for (int j = 0; j < i; j++) {cin >> item;ListNode* s = new ListNode;s->data = item;s->next = p->next;p->next = s;p = s;}}; // 初始化链表void LL_merge(LinkList La, LinkList Lb) { ListNode* p1 = La.head->next;ListNode* p2 = Lb.head->next;ListNode* p3 = head;while (p1 && p2) {if (p1->data > p2->data) {p3->next = p2;p3 = p2;p2 = p2->next;}else {p3->next = p1;p3 = p1;p1 = p1->next;}}p3->next = p1 ? p1 : p2;LL_display();};void LL_display(); // 输出单链表的内容
};
LinkList::LinkList()
{head = new ListNode();len = 0;
}
void LinkList::LL_display()
{ListNode* p;p = head->next;while (p){cout << p->data << ' ';p = p->next;}cout << endl;
}int main() {LinkList *a = new LinkList;LinkList *b = new LinkList;int t1, t2;cin >> t1;a->LL_set(t1);cin >> t2;b->LL_set(t2);ListNode* p1;ListNode* p2;p1 = a->head;p2 = b->head;LinkList* c = new LinkList;c->LL_merge(*a,*b);
}