美文网首页
剑指Offer面试题25 合并两个排序链表

剑指Offer面试题25 合并两个排序链表

作者: Yue_Q | 来源:发表于2018-12-25 18:55 被阅读0次

    题目描述

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
        {
            ListNode *pHead3 = new ListNode(3);
            if(!pHead1 && !pHead2) return NULL;
            
            ListNode *p1 = pHead1;
            ListNode *p2 = pHead2;
            if(!p1) return pHead2;
            if(!p2) return pHead1;
           
             ListNode *p3 = pHead3;
            while(p1 || p2){
                if(p1->val < p2->val){
                    p3->next = p1;
                    p1 = p1->next;
                }else{
                    p3->next = p2;
                    p2 = p2->next;
                }
                p3 = p3->next;
                
                  if(!p1) {
                    p3->next = p2;
                    break;
                }
                
                if(!p2){
                    p3->next = p1;
                    break;
                }
            }
            return pHead3->next;
        }
    };
    

    思路:

    • 使用p1,p2分别指向pHead1,pHead2,在使用p3指向pHead3。
    • 判断 p1,p2 较小指向的值,将它放在 p3 后面,然后依次移动指针

    解法二

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

    思路:

    • 如果 pHead1 等于空,返回 pHead2。pHead2 同理
    • 比较它们的值,返回值小的节点,下一个节点进入递归。

    相关文章

      网友评论

          本文标题:剑指Offer面试题25 合并两个排序链表

          本文链接:https://www.haomeiwen.com/subject/mrhqlqtx.html