欢迎来到我的博客https://www.cnblogs.com/veis/

https://www.cnblogs.com/veis/p/14182037.html

合并两个有序链表

1、要求:

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

 

2、核心处理代码(递归方式)

思路:

  (1)判断否有其中一个或两个是空链表,如果是只有1个为空,则返回非空的链表;如果两个都为空,则返回第一个判断的链表;

  (2)找到两个链表中最小的元素,作为新链表的头结点;然后把新头结点的下一个作为被选出头结点的那个链表的头,继续比较;

struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :val(x), next(NULL) 
        {
	}
};

// 处理函数
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) 
{
        if(pHead1==NULL)
            return pHead2;
        else if(pHead2==NULL)
            return pHead1;
        
        ListNode* newhead=NULL;
        if(pHead1->val<pHead2->val)
        {
            newhead = pHead1;
            newhead->next = Merge(pHead1->next,pHead2);
        }
        else
        {
            newhead = pHead2;
            newhead->next = Merge(pHead1,pHead2->next);
        }
        return newhead;
} 

  

posted @ 2020-04-02 22:46  veis  阅读(133)  评论(0)    收藏  举报