合并两个排序链表

来源:互联网 发布:hadoop大数据分析 编辑:程序博客网 时间:2024/06/05 19:38

问题描述:将两个排序链表合并为一个新的排序链表

样例

给出 1->3->8->11->15->null2->null, 返回 1->2->3->8->11->15->null

方法一(非递归方法):

/** * Definition of ListNode * class ListNode { * public: *     int val; *     ListNode *next; *     ListNode(int val) { *         this->val = val; *         this->next = NULL; *     } * } */class Solution {public:    /**     * @param ListNode l1 is the head of the linked list     * @param ListNode l2 is the head of the linked list     * @return: ListNode head of linked list     */    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {        // write your code here        ListNode *head = NULL;        ListNode *pre = NULL;        if(l1 == NULL && l2 == NULL){            return NULL;        }        else if(l1 == NULL && l2!=NULL){            return l2;        }        else if(l1!=NULL && l2 ==NULL){            return l1;        }        while(l1 != NULL && l2 != NULL){            int val1 = 0,val2 = 0;            val1 = l1->val;            val2 = l2->val;            ListNode* temp = (ListNode*)malloc(sizeof(ListNode));            if(val1<val2){                temp  = l1;                if(head == NULL){                    head = temp;                    pre = head;                }                else{                    pre->next = temp;                    pre = temp;                }                l1 = l1->next;            }            else{                temp  = l2;                if(head == NULL){                    head = temp;                    pre = head;                }                else{                    pre->next = temp;                    pre = temp;                }                l2 = l2->next;            }        }        if(l1 == NULL){            pre->next = l2;        }        else if(l2 == NULL){            pre->next = l1;        }        return head;    }};


方法二:(递归方法)

/** * Definition of ListNode * class ListNode { * public: *     int val; *     ListNode *next; *     ListNode(int val) { *         this->val = val; *         this->next = NULL; *     } * } */class Solution {public:    /**     * @param ListNode l1 is the head of the linked list     * @param ListNode l2 is the head of the linked list     * @return: ListNode head of linked list     */    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {        if(l1 == NULL){            return l2;        }        if(l2 == NULL){            return l1;        }        ListNode *head = NULL;                if(l1->val < l2->val){            head = l1;            head->next = mergeTwoLists(l1->next,l2);        }        else{            head = l2;            head->next = mergeTwoLists(l1,l2->next);                    }        return head;    }};