剑指offer:面试题17——合并两个排序链表

剑指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;        
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值