• 【leetcode】【单链表】【148】Sort List


    #include<iostream>
    using namespace std;
    
    struct ListNode {
    	int val;
    	ListNode *next;
    	ListNode(int x) : val(x), next(NULL) {}
    };
    
    class Solution {
    public:
    	ListNode* merge(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* mergeSort(ListNode* head){ //归并排序
    		if (head == NULL || head->next == NULL)
    			return head;
    		ListNode* slow = head;
    		ListNode* fast = head;
    		ListNode* preSlow = NULL;
    		while (fast&&fast->next){
    			preSlow = slow;
    			slow = slow->next;
    			fast = fast->next->next;
    		}
    		preSlow->next = NULL;
    		ListNode* lList = mergeSort(head);
    		ListNode* rList = mergeSort(slow);
    		return merge(lList, rList);
    	}
    	ListNode* sortList(ListNode* head) {
    		if (head == NULL || head->next == NULL)
    			return head;
    		return mergeSort(head);
    	}
    	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(){
    	Solution solution;
    
    	ListNode* head = NULL;
    	head = solution.createList(head);
    	solution.printNode(head);
    
    	head = solution.sortList(head);
    	solution.printNode(head);
    	system("pause");
    	return 0;
    }

  • 相关阅读:
    【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题
    【BZOJ】1015: [JSOI2008]星球大战starwar
    poj 2001 Shortest Prefixes trie入门
    hdu 1251 统计难题 trie入门
    hdu 4570 Multi-bit Trie 区间DP入门
    Lucas定理的理解与应用
    hdu 3944 DP? 组合数取模(Lucas定理+预处理+帕斯卡公式优化)
    组合数模板
    如何使用弹窗来让用户订阅电子杂志
    分享一则电子邮件营销案例
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558297.html
Copyright © 2020-2023  润新知