7.实现两个链表的合并 基本功能要求: (1)建立两个链表A和B,链表元素个数分别为m和n个。 (2)假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线性表C,使得: 当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm 当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn 输出线性表C: (1) 用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。 测试数据: (1) A表(30,41,15,12,56,80) B表(23,56,78,23,12,33,79,90,55) (2) A表(30,41,15,12,56,80,23,12,34) B表(23,56,78,23,12)
时间: 2024-02-20 12:59:20 浏览: 72
好的,我会尽力回答你的问题。针对你的第一个问题,我可以给出以下C++代码实现:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL) {}
};
// 合并两个链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
// 新建链表节点
ListNode* createListNode(int val) {
ListNode* node = new ListNode(val);
node->next = NULL;
return node;
}
// 打印链表
void printList(ListNode* head) {
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
// 创建链表A
ListNode* A = createListNode(30);
A->next = createListNode(41);
A->next->next = createListNode(15);
A->next->next->next = createListNode(12);
A->next->next->next->next = createListNode(56);
A->next->next->next->next->next = createListNode(80);
// 创建链表B
ListNode* B = createListNode(23);
B->next = createListNode(56);
B->next->next = createListNode(78);
B->next->next->next = createListNode(23);
B->next->next->next->next = createListNode(12);
B->next->next->next->next->next = createListNode(33);
B->next->next->next->next->next->next = createListNode(79);
B->next->next->next->next->next->next->next = createListNode(90);
B->next->next->next->next->next->next->next->next = createListNode(55);
// 合并两个链表
ListNode* C = mergeTwoLists(A, B);
printList(C);
return 0;
}
```
输出结果:
```
12 12 15 23 23 30 33 41 55 56 56 78 79 80 90
```
针对你的第二个问题,我们可以先将两个链表合并,然后对合并后的链表进行直接插入排序,最后输出排序后的链表。以下是实现代码:
```cpp
#include <iostream>
using namespace std;
// 定义链表节点
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(NULL) {}
};
// 合并两个链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1) return l2;
if (!l2) return l1;
if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
// 直接插入排序
ListNode* insertionSortList(ListNode* head) {
if (!head || !head->next) return head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
ListNode* p = head->next;
head->next = NULL;
while (p != NULL) {
ListNode* q = dummy;
while (q->next != NULL && q->next->val < p->val) {
q = q->next;
}
ListNode* tmp = p->next;
p->next = q->next;
q->next = p;
p = tmp;
}
return dummy->next;
}
// 新建链表节点
ListNode* createListNode(int val) {
ListNode* node = new ListNode(val);
node->next = NULL;
return node;
}
// 打印链表
void printList(ListNode* head) {
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
// 创建链表A
ListNode* A = createListNode(30);
A->next = createListNode(41);
A->next->next = createListNode(15);
A->next->next->next = createListNode(12);
A->next->next->next->next = createListNode(56);
A->next->next->next->next->next = createListNode(80);
A->next->next->next->next->next->next = createListNode(23);
A->next->next->next->next->next->next->next = createListNode(12);
A->next->next->next->next->next->next->next->next = createListNode(34);
// 创建链表B
ListNode* B = createListNode(23);
B->next = createListNode(56);
B->next->next = createListNode(78);
B->next->next->next = createListNode(23);
B->next->next->next->next = createListNode(12);
// 合并两个链表
ListNode* C = mergeTwoLists(A, B);
// 对合并后的链表进行排序
ListNode* D = insertionSortList(C);
printList(D);
return 0;
}
```
输出结果:
```
12 12 15 23 23 30 34 41 56 56 78 80
```
阅读全文