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

合并两个排序的链表

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

/* struct ListNode { int val; struct ListNode next; ListNode(int x) : val(x), next(NULL) { } };/ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { ListNode* p1=pHead1,*p2=pHead2;

    if(p1==nullptr||p2==nullptr)
    {
        if(p1==nullptr&&p2==nullptr)
        {
            return p1;
        }
        else if(p1==nullptr)
        {
            return p2;
        }
        else
            return p1;
    }
    
    ListNode* tmp=nullptr;
    ListNode* p=nullptr;
    
    int i;                       //设置互斥变量i,以确保字符串有序合并
    if(p1->val<=p2->val)
    {
        p=p1;             //若p1链表第一个元素小,以此为返回链表,i=1表示此时链表p末尾结点在链表1上
        i=1;
    }
    else                  //若p2链表第一个元素小,以p2为返回链表,i=2表示链表p末尾结点在链表2上
    {
        p=p2;
        i=2;
    }
    
    
    
    while((p1!=nullptr)&&(p2!=nullptr))           //若某一个链表遍历完,退出比较的循环
    {
        if((p1->val<=p2->val)&&i==1)      //为防止p1.val与p2.val相等时,链表串序,使用互斥量i
        {
            if(p1->next!=NULL)
            {
              if((p1->next->val)<=(p2->val))
               {
                  p1=p1->next;
               }
              else
              {
                 tmp=p1->next;
                 p1->next=p2;
                 p1=tmp;
                 i=2;
              
               }
            }
            else
            {
                 tmp=p1->next;
                 p1->next=p2;
                 p1=tmp;
                 i=2;
              
            }
        }
        else if((p1->val>=p2->val)&&i==2)
        {
            if(p2->next!=NULL)
            {
              if((p2->next->val)<=(p1->val))
               {
                  p2=p2->next;
               }
              else
              {
                 tmp=p2->next;
                 p2->next=p1;
                 p2=tmp;
                  i=1;
              
               }
            }
            else
            {
                 tmp=p2->next;
                 p2->next=p1;
                 p2=tmp;
                 i=1;
              
            }

        }
    }
    
    return p;
}

};

全部评论

相关推荐

程序员鼠鼠_春招版:都很烂大街,rpc也基本没人问,考研吧,不然就包装一段实习再去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务