Leetcode: Sort List - 归并
来源:互联网 发布:tcp ip协议c语言实现 编辑:程序博客网 时间:2024/04/30 01:26
Sort a linked list in O(n log n) time using constant space complexity.
以前写过快排的,很复杂,也容易出错。用归并试试,发现相当简单,逻辑也很清楚。一次通过。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *sortList(ListNode *head) { if (head == NULL || head->next == NULL) { return head; } ListNode *fast = head; ListNode *slow = head; ListNode *tail = slow; while (fast != NULL && fast->next != NULL) { fast = fast->next->next; tail = slow; slow = slow->next; } tail->next = NULL; ListNode *first = sortList(head); ListNode *second = sortList(slow); // merge the 2 sorted lists head = new ListNode(0); tail = head; while (first != NULL && second != NULL) { if (first->val <= second->val) { tail->next = first; first = first->next; } else { tail->next = second; second = second->next; } tail = tail->next; } if (first != NULL) { tail->next = first; } else if (second != NULL) { tail->next = second; } tail = head->next; delete head; return tail; }};
=======================第二次======================
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *sortList(ListNode *head) { if (head == NULL || head->next == NULL) { return head; } ListNode *slow = head; ListNode *fast = head; ListNode *prev = NULL; while (fast != NULL && fast->next != NULL) { fast = fast->next->next; prev = slow; slow = slow->next; } prev->next = NULL; head = sortList(head); slow = sortList(slow); ListNode *new_head = new ListNode(0); ListNode *cur = new_head; while (head != NULL && slow != NULL) { if (head->val <= slow->val) { cur->next = head; head = head->next; } else { cur->next = slow; slow = slow->next; } cur = cur->next; } if (head != NULL) { cur->next = head; } else if (slow != NULL) { cur->next = slow; } head = new_head->next; delete new_head; return head; }};
0 0
- Leetcode: Sort List - 归并
- sort list leetcode (归并排序)
- Leetcode Sort List 链表归并排序
- Leetcode:Sort List 对单链表归并排序
- 【leetcode 单链表归并排序】Sort List
- 【LeetCode】 sort list 单链表的归并排序
- [leetcode] 134 Sort List (链表 & 归并排序)
- LeetCode Sort List(单链表归并排序)
- 归并排序---Sort List
- leetcode:Sort List(链表的归并排序)
- [C++]LeetCode: 125 Sort List (归并排序链表)
- LeetCode Sort List 链表的归并排序
- leetcode:Sort List 使用归并排序的解决思路
- LeetCode 148. Sort List 解题报告(归并排序小结)
- leetcode 148. Sort List 链表归并排序
- [leetcode][list][sort] Sort List
- Insertion Sort List | leetcode
- Leetcode: Insertion Sort List
- MongoDB初探-细说聚合
- c++数据类型
- QT1 设置窗口标题 和最大化按钮
- 小笔记~ubuntu下的屏幕亮度调节
- ubuntu12.04环境下安装vmware workstation10.01
- Leetcode: Sort List - 归并
- ARPR注册码
- UVA12299 RMQ with Shifts 线段树查询 单点更新
- OpenGL+QT实现矢量和影像的叠加绘制
- eclipse中使用Lombok
- C语言 内存分配 地址 指针 数组 参数 实例解析
- java socket编程实现简单聊天室功能 单线程执行
- java 序列化
- 电压信号的隔离传输系统(模拟传输和数字传输)