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

合并两个排序的链表

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

ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
        // 处理空情形
        if(pHead1 == NULL) return pHead2;
        if(pHead2 == NULL) return pHead1;
        // 新的起始节点
        ListNode* pNewHead;
        if(pHead1->val <= pHead2->val) pNewHead = pHead1;
        else pNewHead = pHead2;
        
        // last_pos用来保存正在移动的指针的上一个节点
        ListNode* last_pos = pHead1;
        // turn=true表示链表1指针在前进,false表示链表2指针在前进
        bool turn = true;
        if(pHead2->val < pHead1->val){
            last_pos = pHead2;
            turn = false;
        }
        /** 
        对于两个链表中正在前进的那一个
            1.如果当前值小于等于另一个链表指针的值,继续前进
                **重点是第一次切换到一条链表时,last_pos和链表当前指针是一样的
                **若连续在一条链表上前进了两次,则需要更新last_pos保证跟当前链表指针相差1
            2.如果当前值大于另一个链表指针值,更改last_pos的next指针,然后切换到另一链表
        **/
        while(pHead1 != NULL && pHead2 != NULL){
            if(turn){
                if(pHead1->val > pHead2->val){
                    last_pos->next = pHead2;
                    last_pos = pHead2;
                    turn = false;
                }
                else {
                    pHead1 = pHead1->next;
                    if(last_pos->next != pHead1) last_pos = last_pos->next;
                }
            }else{
                if(pHead2->val > pHead1->val){
                    last_pos->next = pHead1;
                    last_pos = pHead1;
                    turn = true;
                }
                else {
                    pHead2 = pHead2->next;
                    if(last_pos->next != pHead2) last_pos = last_pos->next;
                }
            }
        }
        // 处理有一条链表已经结束的情况,直接接到另一条后面
        if(pHead1 == NULL) last_pos->next = pHead2;
        if(pHead2 == NULL) last_pos->next = pHead1;
        return pNewHead;
    }

#剑指offer#
全部评论

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
黑皮白袜臭脚体育生:简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写会更好另外宣传下自己的开源仿b站微服务项目,GitHub已经410star,牛客上有完整文档教程,如果觉得有帮助的话可以点个小星星,蟹蟹
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务