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

合并两个排序的链表

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#
全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-09 19:13
求你们别卷了的大学生...:你不骂他,我就要骂你了
今天你投了哪些公司?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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