Wednesday, October 1, 2014

Merge Two Sorted Lists

  use a dummy node
维护两个指针对应两个链表,因为一般会以一条链表为基准,比如说l1, 那么如果l1当前元素比较小,那么直接移动l1即可,否则将l2当前的元素插入到l1当前元素的前面。算法时间复杂度是O(m+n),m和n分别是两 条链表的长度,空间复杂度是O(1),代码如下:

    ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
        ListNode dummy(0);dummy.next=l1;
        ListNode*prev=&dummy;
        while(l2&&prev->next){
            if(l2->val<prev->next->val){
                ListNode* ne=l2->next;
                l2->next=prev->next;
                prev->next=l2;
                l2=ne;
            }
            prev=prev->next;
        }
        if(prev->next==NULL)
            prev->next=l2;
        return dummy.next;  
    }

No comments:

Post a Comment