合并两个反转链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
递归
归并:把整个过程分为很多个子过程,每个过程满足规则,然后合并子过程。
链表1和链表2谁的首结点值小,谁就作为链表的首结点。一直判断到某一链表为NULL,直接将链表接上即可。
时间复杂度O(n),空间复杂度O(n)。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (!pHead1)
{
return pHead2;
}
if (!pHead2)
{
return pHead1;
}
ListNode *node = NULL;
if (pHead1->val < pHead2->val)
{
node = pHead1;
node->next = Merge(pHead1->next, pHead2);
}
else
{
node = pHead2;
node->next = Merge(pHead1, pHead2->next);
}
return node;
}
};