当合并两个已按升序排列的链表时,可以使用指针遍历两个链表,并选择合适的节点插入到一个新链表中。以下是一般的步骤:
- 创建一个新链表的头结点,并用指针指向它。
- 使用两个指针,一个指向第一个链表的头结点,另一个指向第二个链表的头结点。
- 遍历两个链表直到其中一个链表已到达结尾。在每次遍历时选择相对较小的节点并插入到新链表。
- 如果其中一个链表到达结尾而另一个链表仍然有节点,可以直接将剩下的节点插入到新链表的末尾。
- 返回新链表的头结点。
下面是一个标准的C++实现(采用了递归方法):
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == NULL)
return l2;
else if (l2 == NULL)
return l1;
ListNode *result;
if (l1->val <= l2->val) {
result = l1;
result->next = mergeTwoLists(l1->next, l2);
} else {
result = l2;
result->next = mergeTwoLists(l1, l2->next);
}
return result;
}
};
下面是两个示例的输入和输出:
示例1:
l1:1 -> 2 -> 4
l2:1 -> 3 -> 4
输出:1 -> 1 -> 2 -> 3 -> 4 -> 4
示例2:
l1:-
l2:-
输出:-
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C/C++合并两个升序链表的方式 - Python技术站