LeetCode 21 Merge Two Sorted Lists

来源:互联网 发布:mysql 获取字符串下标 编辑:程序博客网 时间:2024/06/05 08:33

Merge Two Sorted Lists

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.

解题思路:这道题很容易,合并两个链表,并按升序排序,我想到一个以空间换时间的方案,单独的链表操作去实现比较麻烦,要考虑边界条件,于是我想到直接将两个链表合并,然后提出数据进行排序,然后赋值给链表。Accepted后发现,效率还不错。当然对于某些极端的内存环境的时候,这个方案不可取。

代码如下:

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {    if(l1==null&&l2!=null){    return l2;    }    if(l1!=null&&l2==null){    return l1;    }    if(l1 == null&&l2==null){    return null;    }    ListNode temp  = l1;//        while(temp.next!=null){        temp=temp.next;        }        temp.next = l2;        ListNode temp3 = l1;        int []vals=new int[1000];        int index=0;        while(temp3!=null){        vals[index++]=temp3.val;        temp3 =temp3.next;        }        Arrays.sort(vals, 0, index);        ListNode temp1 = new ListNode(-1);// l1 l2 首尾相连 然后冒泡        ListNode t1 = temp1;        int i =0;        while(i!=index){        temp1.val = vals[i++];        if(i!=index){            temp1.next = new ListNode(0);        }        temp1 = temp1.next;        }        return t1;    }
这有一个传统的做法,放上来供学习。

/** * 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)     {        ListNode *dummyHead=new ListNode(0);        ListNode *p=dummyHead;        while(l1!=NULL&&l2!=NULL)        {            if(l1->val<l2->val)            {                p->next=l1;                l1=l1->next;                p=p->next;            }            else            {                p->next=l2;                l2=l2->next;                p=p->next;            }        }        if(l1!=NULL)            p->next=l1;        else            p->next=l2;        p=dummyHead->next;        delete dummyHead;        return p;    }};



0 0