Q25合并链表

Q25合并链表 (顺序合并+递归)

题目:

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

思路

直观上并没有特别复杂的地方。但是写起来需要注意nullptr的影响

1.顺序合并

  1. 找出两个链表中,首元素较小的链表头重新定义为p1,另一个为p2。
  2. 当p2的val满足处于[p1, p1+1)内val时,将p2合并至p1后,不然就让P1往前移
    • 注意判断p1+1是否为空!!
  3. 合并时,注意p1, p2的顺序!
/*
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==nullptr)
            return pHead2;
        if(pHead2==nullptr)
            return pHead1;
           
        ListNode* pMerge = pHead1->val <= pHead2->val ? pHead1 : pHead2;
        ListNode* p1 = pHead1->val <= pHead2->val ? pHead1 : pHead2;
        ListNode* p2 = pHead1->val > pHead2->val ? pHead1 : pHead2;
        ListNode* p1Next = nullptr;
        ListNode* p2Next = nullptr;
        while(p1!=nullptr && p2!=nullptr)
        {
            p1Next = p1->next;
            p2Next = p2->next;
            while(p1Next!=nullptr && !(p2->val>=p1->val && p2->val<p1Next->val))
            {
                p1 = p1Next;
                p1Next = p1->next;
            }
                
            p1->next = p2;
            p2->next = p1Next;
            p1=p2;
            p2 = p2Next;
        }
        return pMerge;
    }
};

2.递归

写出来代码非常简洁,链表的问题似乎都可以用递归来解决。

  • 终止条件,某一个链表为空时,直接返回另一个。
  • 当前函数 确定 两个链表中的头元素,
  • 该头元素的next 设定为 递归后函数的返回值。
  • 递归输入参数为,除当前函数判断出的首节点的其他节点。
  /*
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==nullptr) return pHead2;
        if(pHead2==nullptr) return pHead1;
        
        ListNode* mergedHead = nullptr;
        if(pHead1->val <= pHead2->val)
        {            
            mergedHead = pHead1;
            mergedHead->next = Merge(pHead1->next, pHead2);
        }
        else
        {
            mergedHead = pHead2;
            mergedHead->next = Merge(pHead2->next, pHead1);
        }
        return mergedHead;
    }
};
发布了48 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/mhywoniu/article/details/105422147
今日推荐