剑指offer:面试题17——合并两个排序链表
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:直接合并O(n)——如下
或者使用递归合并O(logn)——书114页
/*
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==NULL)return pHead2;
if(pHead2==NULL)return pHead1;
ListNode* pTemp1=pHead1;
ListNode* pTemp2=pHead2;
ListNode* pTemp=NULL;
ListNode* pPrev=pHead1;
ListNode* pTempEnd=NULL;
while( (pTemp1!=NULL)&&(pTemp2!=NULL))
{
if(pTemp1->next==NULL) pTempEnd=pTemp1;
if(pTemp2->val<pTemp1->val||pTemp2->val==pTemp1->val)
{
ListNode *pcurNode=pPrev;
pTemp=pTemp2;
pTemp2=pTemp2->next;
pTemp->next=pPrev->next;
pPrev->next=pTemp;
}
/* else if(pTemp2->val==pTemp1->val)
{
ListNode *pcurNode=pTemp2;
pTemp2=pTemp2->next;
free(pcurNode);
} */
else
{
pPrev=pTemp1;
pTemp1=pTemp1->next;
}
}
if(pTemp2==NULL) return pHead1;
if(pTemp1==NULL&&pTemp2!=NULL)
{
pTempEnd->next=pTemp2;
}
return pHead1;
}
};