题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
/*
1.从合并连个链表的头结点开始,链表头结点值小的是合并后链表的头结点,
合并剩余节点,还是比较两个头结点的值,值小的是合并剩余节点后的链表的头结点
把这个节点和前面的节点连接起来。
2.第一个链表是空链表时,合并后就是第二个空链表
第二个链表是空链表时,合并后就是第一个空链表
连个链表都为空时,结果也是空链表
*/
class Solution
{
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (pHead1 == nullptr) //第一个列表为空,返回第二个列表
return pHead2;
if (pHead2 == nullptr) //第二个列表为空,返回第一个列表
return pHead1;
ListNode* mergedhead = nullptr; //初始化合并后列表头指针
if (pHead1->val < pHead2->val) //第一个列表头节点小于第二个列表头节点
{
mergedhead = pHead1; //以第一个列表的头结点作为合并后列表头结点
mergedhead->next = Merge(pHead1->next, pHead2); //新链表下一个节点递归合并
}
else //第一个列表头节点大于第二个列表头节点
{
mergedhead = pHead2; //以第二个列表的头结点作为合并后列表头结点
mergedhead->next = Merge(pHead1, pHead2->next); //新链表下一个节点递归合并
}
return mergedhead; //返回新链表指针
}
};