将两个循环单链表合并c++
时间: 2024-09-26 12:12:21 浏览: 41
在C++中,将两个循环单链表合并通常需要创建一个新的循环链表,同时遍历这两个原有的链表,依次添加节点到新链表中。以下是合并过程的一个简单示例:
```cpp
#include <iostream>
// 定义单链表节点结构体
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 合并两个循环链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建新的头节点和尾指针
ListNode* head = nullptr, *tail = nullptr;
if (l1 != nullptr) {
head = l1;
tail = l1;
} else if (l2 != nullptr) {
head = l2;
tail = l2;
}
// 遍历两个链表,将较小的元素添加到新链表
while (l1 && l2) {
if (l1->val <= l2->val) {
tail->next = l1;
l1 = l1->next;
tail = tail->next;
} else {
tail->next = l2;
l2 = l2->next;
tail = tail->next;
}
}
// 如果其中一个链表还有剩余,将其连接到新链表末尾
if (l1) {
tail->next = l1;
} else {
tail->next = l2;
}
return head; // 返回新链表的头节点
}
// 打印链表
void printList(ListNode* node) {
while (node != nullptr) {
std::cout << node->val << " -> ";
node = node->next;
}
std::cout << "nullptr\n";
}
int main() {
// 例子:假设有两个循环链表l1 = [1, 2, 3] 和 l2 = [4, 5]
ListNode* l1 = new ListNode(1);
l1->next = new ListNode(2);
l1->next->next = new ListNode(3);
l1->next->next->next = l1;
ListNode* l2 = new ListNode(4);
l2->next = new ListNode(5);
l2->next->next = l2;
ListNode* mergedList = mergeTwoLists(l1, l2);
printList(mergedList);
return 0;
}
```
阅读全文