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

来源:互联网 发布:网络空间主权 编辑:程序博客网 时间:2024/06/06 05:35

题目描述

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


/*struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};*///第一种想法,全部取出来,然后排序放回,不可行class Solution {public:    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)    {        /*        ListNode* p = pHead1;        ListNode* q;        int temp;        if(pHead1 == NULL)            return pHead2;        if(pHead2 == NULL)            return pHead1;        while(p->next != NULL) {            p = p->next;        }        p->next = pHead2;        for(p = pHead1; p != NULL; p = p->next) {            for(q = p->next; q != NULL; q = q->next) {                if(p->val > q->val) {                    temp = p->val;                    p->val = q->val;                    q->val = temp;                }            }        }                return pHead1;        */                ListNode* result = NULL;        ListNode* current;        if(pHead1 == NULL)            return pHead2;        if(pHead2 == NULL)            return pHead1;        while(pHead1 != NULL && pHead2 != NULL) {            if(pHead1->val < pHead2->val) {                if(result == NULL) {                    result = pHead1;                    current = pHead1;                }                else {                    current->next = pHead1;                    current = pHead1;                }                pHead1 = pHead1->next;            }            else {                if(result == NULL) {                    result = pHead2;                    current = pHead2;                }                else {                    current->next = pHead2;                    current = pHead2;                }                pHead2 = pHead2->next;            }         }         /*             //递归写法,把一个大问题看成小部分来处理,解决含有两个值的链表,然后调用自身函数            if(pHead1->val < pHead2->val) {                result = pHead1;                 result->next = Merge(pHead1->next, pHead2);            }            else {                result = pHead2;                result->next = Merge(pHead1, pHead2->next);            }          */                        if(pHead1 == NULL) current->next = pHead2;        else current->next = pHead1;        return result;                    }};




0 0
原创粉丝点击