sort-list——链表、快慢指针找中间、归并排序
Sort a linked list in O(n log n) time using constant space complexity.
链表,快慢指针找中点,归并排序。
注意判断条件fast->next!=NULL&&fast->next->next!=NULL,若为fast!=NULL&&fast->next!=NULL则会出现内存溢出
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *sortList(ListNode *head) { 12 if(head==NULL || head->next==NULL) 13 return head; 14 ListNode* slow, *fast; 15 slow=head; 16 fast=head; 17 while(fast->next!=NULL&&fast->next->next!=NULL){ 18 slow=slow->next; 19 fast=fast->next->next; 20 } 21 fast=slow; 22 slow=slow->next; 23 fast->next=NULL; 24 fast=sortList(head); 25 slow=sortList(slow); 26 return merge(fast,slow); 27 28 } 29 ListNode *merge(ListNode *left, ListNode *right){ 30 ListNode *res,*temp; 31 if(left==NULL){ 32 res=right; 33 return res; 34 } 35 if(right==NULL){ 36 res=left; 37 return res; 38 } 39 if(left->val<=right->val){ 40 res=left; 41 left=left->next; 42 }else{ 43 res=right; 44 right=right->next; 45 } 46 temp=res; 47 while(left!=NULL&&right!=NULL){ 48 if(left->val<=right->val){ 49 temp->next=left; 50 left=left->next; 51 }else{ 52 temp->next=right; 53 right=right->next; 54 } 55 temp=temp->next; 56 57 } 58 if(left!=NULL){ 59 temp->next=left; 60 } 61 if(right!=NULL){ 62 temp->next=right; 63 } 64 return res; 65 } 66 };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
分类:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2016-06-07 TelephonyManager类与PhoneStateListener