LeetCode 23.Merge k Sorted Lists

제목:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
분석 및 답변:
K개의 질서정연한 체인 테이블을 병합합니다.앞에 두 개의 체인 테이블을 통합하는 프로그램이 있는 이상 이 문제는 분리법으로 풀 것이 틀림없다. 두 개의 합병은 바로 병합 정렬과 유사하고 복잡도는 O(n*logn)이다.
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
	ListNode *mergeKLists(vector<ListNode *> &lists) {
		queue<ListNode *> q;
		ListNode *l1 = NULL, *l2 = NULL;
		for (vector<ListNode *>::iterator itr = lists.begin();
				itr != lists.end(); itr++) {
			q.push(*itr);
		}
		while (!q.empty()) {
			l1 = q.front();
			q.pop();
			if (q.empty())
				break;
			l2 = q.front();
			q.pop();
			q.push(mergeTwoLists(l1, l2));
		}
		return l1;
	}
	ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
		ListNode *p, *result;
		p = result = new ListNode(0); //       
		while (l1 || l2) {
			if (l2 == NULL || (l1 && l2 && l1->val < l2->val)) {
				p->next = l1;
				l1 = l1->next;
			} else {
				p->next = l2;
				l2 = l2->next;
			}
			p = p->next;
		}
		return result->next;
	}
};

좋은 웹페이지 즐겨찾기