将两个非递减有序单链表合并成一个非递减有序单链表void mergeLists(struct Node*list1,struct Node*list2)
时间: 2024-09-18 16:15:13 浏览: 100
将两个非递减有序的单链表合并成一个新的非递减有序链表,可以使用迭代或递归的方式实现。这里是一个简单的迭代方法:
```cpp
void mergeLists(struct Node* list1, struct Node* list2)
{
// 创建一个新的头节点
struct Node* head = nullptr;
struct Node* tail = nullptr;
// 检查链表是否为空
if (list1 != nullptr)
{
head = list1;
}
else if (list2 != nullptr)
{
head = list2;
}
// 初始化尾指针为头节点
tail = head;
while (list1 != nullptr && list2 != nullptr)
{
// 如果第一个链表的当前节点值小于等于第二个链表,添加到结果链表
if (list1->data <= list2->data)
{
tail->next = list1;
list1 = list1->next;
}
// 否则,添加第二个链表的节点
else
{
tail->next = list2;
list2 = list2->next;
}
// 更新尾指针指向新添加的节点
tail = tail->next;
}
// 如果其中一个链表还有剩余节点未处理,则将其添加到结果链表的尾部
if (list1 != nullptr)
{
tail->next = list1;
}
else if (list2 != nullptr)
{
tail->next = list2;
}
return;
}
```
在这个函数中,我们遍历两个链表,比较当前节点的值,并将较小的节点添加到新的链表中,直到遍历完其中一个链表。然后,我们将另一个链表剩余的部分直接添加到结果链表的尾部。
阅读全文