zoukankan      html  css  js  c++  java
  • 【leetcode】【单链表,vector,queue】【23】Merge k Sorted Lists

    #include<iostream>
    #include<vector>
    #include<queue>
    using namespace std;
    
    struct ListNode {
    	int val;
    	ListNode *next;
    	ListNode(int x) : val(x), next(NULL) {}
    };
    
    class Solution {
    public:
    	ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    		ListNode* temp = new ListNode(0);
    		ListNode* cur = temp;
    		while (l1&&l2){
    			if (l1->val < l2->val){
    				cur->next = l1;
    				l1 = l1->next;
    			}
    			else{
    				cur->next = l2;
    				l2 = l2->next;
    			}
    			cur = cur->next;
    		}
    		if (l1)
    			cur->next = l1;
    		else
    			cur->next = l2;
    		cur = temp->next;
    		temp->next = NULL;
    
    		delete temp;
    		return cur;
    	}
    
    	ListNode* mergeKLists(vector<ListNode*>& lists) {
    		int numOfLists = lists.size(); 
    		queue<ListNode*> que;
    		for (int i = 0; i < numOfLists; ++i){
    			if (lists[i])
    				que.push(lists[i]);
    		}
    
    		if (que.size() == 0)//lists为空或存的全是空链表
    			return NULL;
    
    		while (que.size()>1){
    			ListNode* l1 = que.front();
    			que.pop();
    			ListNode* l2 = que.front();
    			que.pop();
    			que.push(mergeTwoLists(l1, l2));
    		}
    		return que.front();
    	}
    	ListNode* createList(ListNode* head){
    		int numOfNode;
    		int value;
    		cout << "please input number of listNode:";
    		cin >> numOfNode;
    		cin >> value;
    		head = new ListNode(value);
    		ListNode* cur = head;
    		for (int i = 1; i < numOfNode; ++i){
    			cin >> value;
    			ListNode* temp = new ListNode(value);
    			cur->next = temp;
    			cur = temp;
    		}
    		return head;
    	}
    	void printNode(ListNode* head){
    		ListNode* cur = head;
    		while (cur){
    			cout << cur->val << " ";
    			cur = cur->next;
    		}
    		cout << endl;
    	}
    };
    
    int main(){
    	vector<ListNode*> lists;
    	ListNode* head = NULL;
    	Solution solution;
    	int numOfLists;
    	cout << "请输入链表个数:";
    	cin >> numOfLists;
    	for (int i = 0; i < numOfLists; ++i){
    		head = solution.createList(head);
    		solution.printNode(head);
    		lists.push_back(head);
    	}
    	
    	head = solution.mergeKLists(lists);
    	solution.printNode(head);
    
    	system("pause");
    	return 0;
    }

  • 相关阅读:
    UI
    最长回文子串
    LRU缓存机制
    环形链表 II
    环形链表
    买卖股票的最佳时机 II
    [CSP-S模拟测试]:连连看(图论+容斥)
    [CSP-S模拟测试]:集合论(模拟)
    [CSP-S模拟测试]:位运算(数学)
    [CERC2016]:凸轮廓线Convex Contour(模拟+数学)
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558311.html
Copyright © 2011-2022 走看看