剑指OFFER 合并两个排序的链表

Posted virgil_devil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指OFFER 合并两个排序的链表相关的知识,希望对你有一定的参考价值。

剑指OFFER 合并两个排序的链表

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* head = NULL;//'结果链表'的头部
    ListNode* cur = NULL;//始终指向'结果链表'的尾部
    //添加到head链表中
    void push_back(int val)
    {
        if(head == NULL)
        {
            head = (ListNode*)malloc(sizeof(ListNode));
            head->val = val;
            head->next = NULL;
            
            cur = head;
            return ;
        }
        ListNode* node = (ListNode*)malloc(sizeof(ListNode));
        node->val = val;
        node->next = NULL;
        cur->next = node;
        cur = node;
    }
    
    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
    {
        head = NULL;
        cur = head;//防止OJ不初始化成员变量(手动预防针)
        ListNode * p1 = pHead1;
        ListNode * p2 = pHead2;
        
        while(p1 != NULL || p2 != NULL)
        {
            //如果p1到尾了,那么就只拷贝p2
            if(p1 == NULL)
            {
                push_back(p2->val);
                p2 = p2->next;
                continue;
            }
            //如果p2到尾了,那么就只拷贝p1
            if(p2 == NULL)
            {
                push_back(p1->val);
                p1 = p1->next;
                continue;
            }
            //递增形式进行拷贝
            if(p1->val < p2->val)
            {
                push_back(p1->val);
                p1 = p1->next;
            }else{
                push_back(p2->val);
                p2 = p2->next;
            }
        }
        //如果能从while循环中出来,表示p1,p2都为NULL
        return head;
    }
};

以上是关于剑指OFFER 合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章

《剑指Offer——合并两个排序的链表,两个链表的第一个公共节点》代码

剑指offer 16.合并两个排序的链表

剑指offer——合并两个排序的链表

剑指OFFER合并两个排序的链表

[剑指offer]面试题17:合并两个排序的链表

剑指offer-合并两个排序的链表