Merge Two Sorted Lists

来源:互联网 发布:抚仙湖水下古城 知乎 编辑:程序博客网 时间:2024/06/06 18:10

题目

原题

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

思路

类似于有序数组的归并排序.这里需要注意的是如何设置head, 和如何交换l1, l2.或者用递归的方式来弄, 这个比较简单明了.

code

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        /// method 1        // if(l1 == NULL) return l2;        // if(l2 == NULL) return l1;        // ListNode* head = NULL;        // ListNode* pre = NULL;        // while(l1 != NULL && l2 != NULL) {        //     if(l1->val <= l2->val) {        //         if(pre == NULL) {        //             head = l1;        //         }        //         pre = l1;        //         l1 = l1->next;        //     } else {        //         ListNode* tmp = l1;        //         if(pre == NULL) {        //             head = l2;        //             pre = l2;        //         } else {        //             pre->next = l2;        //             pre = pre->next;        //         }        //         l2 = tmp;        //         l1 = pre->next;        //     }        // }        // if(l2) pre->next = l2;        // return head;        /// method 2        if(l1 == NULL) return l2;        if(l2 == NULL) return l1;        if(l1->val <= l2->val) {            l1->next = mergeTwoLists(l1->next, l2);            return l1;        } else {            l2->next = mergeTwoLists(l2->next, l1);            return l2;        }    }};
0 0
原创粉丝点击