程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode: Merge k Sorted Lists [022]

LeetCode: Merge k Sorted Lists [022]

編輯:C++入門知識

【題目】

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.


【題意】

合並K個有序鏈表


【思路】

歸並


【代碼】

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* merge(vector&lists, int start, int end){
        if(start==end)return lists[start];
        int mid=(start+end)/2;
        ListNode*p1=merge(lists, start, mid);
        ListNode*p2=merge(lists, mid+1, end);
        ListNode*head=NULL, *p=NULL;
        while(p1&&p2){
            if(p1->valval){
                if(p)p->next=p1;
                p=p1;
                p1=p1->next;
            }
            else{
                if(p)p->next=p2;
                p=p2;
                p2=p2->next;
            }
            
            if(head==NULL)head=p;
        }
        if(p1){
            if(p)p->next=p1;
            else{p=p1;head=p;}
        }
        if(p2){
            if(p)p->next=p2;
            else{p=p2;head=p;}
        }
        return head;
    }
    ListNode *mergeKLists(vector &lists) {
		int size=lists.size();
		if(size==0) return NULL;
		if(size==1) return lists[0];
		return merge(lists, 0, size-1);
    }
};


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved