码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-01-11 13:23:10      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:手动   merge   void   next   ret   结果   ==   变量   code   

剑指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 合并两个排序的链表

标签:手动   merge   void   next   ret   结果   ==   变量   code   

原文地址:https://www.cnblogs.com/virgildevil/p/12179559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!