题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
如图所示(),边界处理()
/*
struct ListNode {
<span style="white-space:pre"> </span>int val;
<span style="white-space:pre"> </span>struct ListNode *next;
<span style="white-space:pre"> </span>ListNode(int x) :
<span style="white-space:pre"> </span>val(x), next(NULL) {
<span style="white-space:pre"> </span>}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
ListNode* merge = (ListNode*)malloc(sizeof(ListNode));
ListNode* newNode = merge;
ListNode* pNode1 = pHead1;
ListNode* pNode2 = pHead2;
while(pNode1!= NULL && pNode2 != NULL){
if((pNode1->val) >= (pNode2->val)){
newNode->next = pNode2;
newNode = pNode2;
pNode2 = pNode2->next;
}else{
newNode->next = pNode1;
newNode = pNode1;
pNode1 = pNode1->next;
}
}
if(pNode1 != NULL)
newNode->next = pNode1;
else
newNode->next = pNode2;
return merge->next;
}
};
递归代码
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 == NULL)
return pHead2;
if(pHead2 == NULL)
return pHead1;
ListNode* mergeHead = NULL;
if(pHead1->val < pHead2->val){
mergeHead = pHead1;
mergeHead->next = Merge(pHead1->next, pHead2);
}
else{
mergeHead = pHead2;
mergeHead->next = Merge(pHead1, pHead2->next);
}
return mergeHead;
}
};