本文共 1655 字,大约阅读时间需要 5 分钟。
Merge Two Sorted Lists
当我们需要将两个有序的列表合并成一个有序的新列表时,常用的方法包括递归和迭代。以下将详细介绍这两种方法,并提供相应的代码实现。
递归方法
递归是一种常见的解决方案,其思路是将问题分解,将较大的问题转化为较小的问题进行处理。对于合并两个有序列表,递归的方法可以简单地描述为:
这种方法的优点是简洁直观,但它可能不够高效,尤其是在处理大规模数据时会引起递归深度过深的问题。
示例代码如下:
// 定义单结点结构struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(nullptr) {}};class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (!l1) return l2; if (!l2) return l1; if (l1->val < l2->val) { l1->next = mergeTwoLists(l1->next, l2); return l1; } else { l2->next = mergeTwoLists(l1, l2->next); return l2; } }};
迭代方法
迭代方法则通过循环遍历来逐步构建结果列表。这种方法的主要步骤如下:
这种方法的优点是空间复杂度低,时间复杂度是O(n + m),其中n和m分别是两个列表的节点数。
示例代码如下:
class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(-1); ListNode* end = head; while (l1 && l2) { if (l1->val < l2->val) { end->next = l1; l1 = l1->next; } else { end->next = l2; l2 = l2->next; } end = end->next; } if (l1) { end->next = l1; } else { end->next = l2; } return head->next; }};
总结
上述两种方法各有优劣。递归方法实现简单易懂,但不适合大规模数据;迭代方法空间占用更少,更适合处理大量数据。但在实际应用中,可以根据具体需求选择相应的实现方法。
转载地址:http://iagyk.baihongyu.com/