用c++语言写出创建两个递增的带头结点的有序链表的代码
时间: 2024-02-27 15:54:04 浏览: 80
好的,以下是用 C++ 语言创建两个递增的带头结点的有序链表的代码:
```cpp
#include <iostream>
using namespace std;
// 定义链表结点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 创建递增的有序链表
ListNode* createList(int n) {
ListNode* head = new ListNode(0);
ListNode* cur = head;
int val;
cout << "请输入链表元素(递增排序):" << endl;
for (int i = 0; i < n; i++) {
cin >> val;
ListNode* node = new ListNode(val);
cur->next = node;
cur = node;
}
return head->next;
}
// 合并两个有序链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0);
ListNode* cur = dummy;
while (l1 && l2) {
if (l1->val < l2->val) {
cur->next = l1;
l1 = l1->next;
} else {
cur->next = l2;
l2 = l2->next;
}
cur = cur->next;
}
if (l1) cur->next = l1;
if (l2) cur->next = l2;
return dummy->next;
}
int main() {
int n1, n2;
ListNode* l1;
ListNode* l2;
cout << "请输入第一个链表的元素个数:" << endl;
cin >> n1;
l1 = createList(n1);
cout << "第一个链表创建完毕" << endl;
cout << "请输入第二个链表的元素个数:" << endl;
cin >> n2;
l2 = createList(n2);
cout << "第二个链表创建完毕" << endl;
ListNode* merged = mergeTwoLists(l1, l2);
cout << "合并后的链表为:" << endl;
while (merged) {
cout << merged->val << " ";
merged = merged->next;
}
cout << endl;
return 0;
}
```
这段代码中,我们首先定义了一个链表结点 `ListNode`,然后用 `createList` 函数分别创建了两个递增的带头结点的有序链表,并用 `mergeTwoLists` 函数将这两个有序链表合并成一个有序链表。最后,我们在 `main` 函数中调用这些函数,并输出合并后的链表。
阅读全文