题目:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。超时的代码:
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode* k;
if (pHead1 == NULL && pHead2 == NULL)return NULL;
if (pHead1 == NULL)return pHead2;
if (pHead2 == NULL)return pHead1;
((pHead1->val) > (pHead2->val)) ? k = pHead1 : k = pHead2;
ListNode* m=k;
while (pHead1 != NULL && pHead2 != NULL){
if ((pHead1->val) >= (pHead2->val)){
k->next= pHead2;
pHead2 = pHead2->next;
k = k->next;
}
else{
k->next = pHead1;
pHead1 = pHead1->next;
k = k->next;
}
}
if (pHead1 ==NULL && pHead2 == NULL){
k->next = NULL;
}
else if (pHead1 == NULL){
while (pHead2 != NULL){
k->next = pHead2;
pHead2 = pHead2->next;
k = k->next;
}
k->next = NULL;
}
else{
while (pHead1 != NULL){
k->next = pHead1;
pHead1 = pHead1->next;
k = k->next;
}
k->next = NULL;
}
return m;
}
};//这里没有考虑到用递归的思想
- 剑指Offer上的代码
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (pHead1 == NULL)
return pHead2;
else if (pHead2 == NULL)
return pHead1;
ListNode* pMergedHead = NULL;
if (pHead1->val < pHead2->val){
pMergedHead = pHead1;
pMergedHead->next = Merge(pHead1->next, pHead2);
}
else{
pMergedHead = pHead2;
pMergedHead->next = Merge(pHead1, pHead2->next);
}
return pMergedHead;
}
};//这里用递归算法进行归并,太好了