题解 | #合并两个排序的链表#

合并两个排序的链表

https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337

(递归解题思路来自剑指offer,思路真的巧妙,以前自己做的都是迭代,边界条件需要注意的多一点)

/*
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* pRes = nullptr;
		if (pHead1->val < pHead2->val) {
			pRes = pHead1;
			pRes->next = Merge(pHead1->next, pHead2);
		}
		else {
			pRes = pHead2;
			pRes->next = Merge(pHead1, pHead2->next);
		}
		return pRes;
	}
};

迭代解法

class Solution {
  public:
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        if (pHead1 == NULL)    return pHead2;
        if (pHead2 == NULL)    return pHead1;
        ListNode* p1 = pHead1;
        ListNode* p2 = pHead2;
        ListNode* res = p1->val > p2->val ? pHead2 : pHead1;
        ListNode* p3 = res;
        if (res == pHead1) {
            p1 = p1->next;
        }
        if (res == pHead2) {
            p2 = p2->next;
        }
        while (p1 && p2) {
            if (p1->val <= p2->val) {
                p3->next = p1;
                p3 = p1;
                p1 = p1->next;
            } else if (p1->val > p2->val) {
                p3->next = p2;
                p3 = p2;
                p2 = p2->next;
            }
        }
        p3->next = p1 ? p1 : p2;
        return res;
    }
};

2023 剑指-链表 文章被收录于专栏

2023 剑指-链表

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务