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

合并两个排序的链表

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


class Solution {
public:

    ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        // write code here
        if(pHead1==nullptr) // 若有任意一个为空 则返回另一个
            return pHead2;
        if(pHead2==nullptr)
            return pHead1;
	  // 两个指针p1,p2来进行遍历
	  // 注意 我们是将p2链入到p1中去,所以需要一个pre1指针,用来存储p1的前驱
        ListNode* p1=pHead1,*p2=pHead2;
        ListNode* pre1=nullptr;
        while(p1!=nullptr && p2!=nullptr)
        {
            if(p1->val <= p2->val)  // 只要1<2,则p1,pre1继续往后走即可
            {
                pre1=p1;
                p1=p1->next;
            }
            else // 需要将p2插入到p1的前面,即pre1的后面
            {
                ListNode* t = p2->next;
                if(pre1!=nullptr) // 如果pre1不为空
                {
                    p2->next=pre1->next;
                    pre1->next=p2;
                    pre1=pre1->next;
                }
                else // pre1为空,则特殊处理一下
                {
                    p2->next=p1; // 直接让p2的next指向p1
                    pre1=p2; // 更新pre1
                    pHead1=pre1; // 更新pHead1 
                }
                p2=t;
            }
        }
        if(p2!=nullptr) // 2还没遍历完,
            pre1->next=p2;
        return pHead1;
    }
};

#牛客创作赏金赛#
牛客网刷题记录 文章被收录于专栏

本人认为值得记录的一些题

全部评论

相关推荐

05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务