当需要将两个有序链表归并为一个有序链表时,最有效的算法是使用一个指针从头到尾遍历两个链表,并按顺序选择节点,将其添加到新链表。我们可以使用递归或迭代方式实现。
以下是使用c++迭代的实现方法:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// 判断两个链表是否为空
if(l1 == nullptr) return l2;
if(l2 == nullptr) return l1;
// 分配一个新的链表头结点
ListNode* dummy = new ListNode(0);
ListNode* p = dummy;
// 遍历两个链表,选择节点,将其添加到新链表
while(l1 != nullptr && l2 != nullptr) {
if(l1->val <= l2->val) {
p->next = l1;
l1 = l1->next;
} else {
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
// 附加剩余元素
if(l1 == nullptr) p->next = l2;
if(l2 == nullptr) p->next = l1;
// 返回新链表的头结点
return dummy->next;
}
以上代码会返回一个新的链表,这个链表是由输入的两个有序链表合并而成的。例如:
第一个链表:1 -> 2 -> 4
第二个链表:1 -> 3 -> 4
合并后的链表:1 -> 1 -> 2 -> 3 -> 4 -> 4
以上是归并两个有序链表的完整攻略,可适用于C++编程。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c++如何实现归并两个有序链表 - Python技术站