链表排序
?
https://leetcode.com/problems/insertion-sort-list/description/
1、歸并排序:
#include <bits/stdc++.h> #include "table.h" using namespace std; typedef long long int LL;struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {} };class Solution { public:ListNode* findMid(ListNode *head) {if (head == NULL || head->next == NULL) return head;ListNode *slow = head, *fast = head->next;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;}ListNode *tmp = slow->next;slow->next = NULL;return tmp;}ListNode* merge(ListNode* one, ListNode* two) {ListNode *first = NULL;if (one->val < two->val) {first = one;one = one->next;} else {first = two;two = two->next;}ListNode *ans = first;while (one && two) {if (one->val < two->val) {first->next = one;one = one->next;} else {first->next = two;two = two->next;}first = first->next;}while (one) {first->next = one;one = one->next;first = first->next;}while (two) {first->next = two;two = two->next;first = first->next;}return ans;}ListNode* guibin(ListNode* head) {if (head == NULL || head->next == NULL) return head;if (head->next->next == NULL) {if (head->val > head->next->val) {swap(head->val, head->next->val);}return head;}ListNode* mid = findMid(head);ListNode* one = guibin(head);ListNode* two = guibin(mid);return merge(one, two);}ListNode* insertionSortList(ListNode* head) {return guibin(head);} };void work() {int a[] = {4, 1, 2, 3, 5, 8};int len = sizeof(a) / sizeof(a[0]);ListNode* first = new ListNode(a[0]);ListNode* tmp = first;for (int i = 1; i < len; ++i) {first->next = new ListNode(a[i]);first = first->next;}tmp = t.insertionSortList(tmp);while (tmp) {printf("%d\n", tmp->val);tmp = tmp->next;} }int main() {work();return 0; } View Code?
轉載于:https://www.cnblogs.com/liuweimingcprogram/p/9649582.html
總結
- 上一篇: ubuntu 16.04安装visual
- 下一篇: 洛谷 P1318 积水面积