Sort List
来源:互联网 发布:乐乎城市青年社区北苑 编辑:程序博客网 时间:2024/06/10 08:32
Sort a linked list in O(n log n) time using constant space complexity.
用归并算法,先找到 list 的中点,然后用 divide and conquer
1. 用 slow,fast 找到中点
2. 合并两个 sorted list
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # @param head, a ListNode # @return a ListNode def sortList(self, head): return self.mergesort(head) def mergesort(self,head): if head==None or head.next==None: return head slow = fast = head while(fast.next!=None and fast.next.next!=None): slow = slow.next fast = fast.next.next sec = slow.next slow.next = None head = self.mergesort(head) sec = self.mergesort(sec) return self.mergetwo(head,sec) def mergetwo(self,first,sec): dummy = ListNode(100) cur = dummy cur1,cur2 = first, sec while True: if cur1==None: cur.next = cur2 return dummy.next if cur2==None: cur.next = cur1 return dummy.next if cur1.val < cur2.val: cur.next = cur1 cur = cur.next cur1 = cur1.next else: cur.next = cur2 cur = cur.next cur2 = cur2.next
/** * 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) { mergesort(head); } ListNode *mergesort(ListNode *head){ if(head==NULL || head->next==NULL){ return head; } ListNode *slow = head, *fast = head; while(fast->next!=NULL && fast->next->next!=NULL){ slow = slow->next; fast = fast->next->next; } ListNode *sec = slow->next; slow->next = NULL; head = mergesort(head); sec = mergesort(sec); return mergetwo(head,sec); } ListNode *mergetwo(ListNode *first, ListNode *sec){ ListNode *dummy = new ListNode(100); ListNode *cur=dummy, *cur1=first, *cur2=sec; while(1){ if(cur1==NULL){ cur->next = cur2; return dummy->next; } if(cur2==NULL){ cur->next = cur1; return dummy->next; } if(cur1->val<cur2->val){ cur->next = cur1; cur1 = cur1->next; }else{ cur->next = cur2; cur2 = cur2->next; } cur = cur->next; } } };
0 0
- list sort
- list sort
- Sort List
- Sort List
- list - sort
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- Sort List
- JSP 中集成JQuery 插件的实用方法
- HDOJ 题目1024 Max Sum Plus Plus(动态规划,不想交子段最大和)
- 迷宫深度优先搜索 找出一条可行路径
- 【Python】网络爬虫
- 开博
- Sort List
- python urllib
- SSH三大框架的工作原理及流程
- 比较好的博客
- Linux常用基本配置
- java serialVersionUID的作用
- Ubuntu解决问题资料记录
- java西天取经之路(四)JSP标签库 【EL和JSTL】
- 二叉树的遍历及线索二叉树