如何利用链表迭代器类合并两个链表,不用考虑顺序直接合并,不用STL,只给出合并函数即可,别的不用写
时间: 2024-10-08 12:24:40 浏览: 44
合并两个单向链表,我们可以创建一个新的链表,其中元素来自第一个链表的节点接着第二个链表的节点。这里是一个简单的示例,假设我们有一个`ListNode`结构体(或类),它包含一个值`val`和指向下一个节点的指针`next`:
```c++
// 假设 ListNode 已经定义好了,包含 val 和 next 指针
class ListNode {
public:
int val;
ListNode* next;
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 创建一个新的头节点,并初始化为第一个列表的头
ListNode* head = nullptr;
ListNode* current = nullptr;
// 遍历两个链表
while (l1 && l2) {
// 如果第一个链表的当前节点值小于等于第二个,添加到结果链表
if (l1->val <= l2->val) {
if (!head) {
head = l1; // 将新链表头设置为第一个链表的第一个节点
}
current->next = l1; // 结果链表添加第一个链表的节点
l1 = l1->next; // 移动第一个链表指针
} else {
current->next = l2; // 否则添加第二个链表的节点
l2 = l2->next; // 移动第二个链表指针
}
current = current->next; // 进入下一轮循环,移动current指针
}
// 如果其中一个链表遍历完了,将另一个剩余部分连接到结果链表
if (l1)
current->next = l1;
else
current->next = l2;
return head; // 返回新的合并后的链表头
}
```
在这个函数中,我们首先检查两个链表的当前节点值,选择较小的一个添加到结果链表中。然后,我们继续遍历这两个链表,直到其中一个结束。最后返回合并后的头节点。
阅读全文