标签:open mamicode rtl val amp 归并排序 hid color 复杂度
看题就发蒙了,在题目给定的复杂度情况下,使用归并排序进行处理。
题中的链表处理,要学会断开链表,即一个链表断成两块,如何设置断点,分成两个链表的处理方法
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 return mergesort( head); 13 14 } 15 ListNode* mergesort(ListNode* node) 16 { 17 if(!node||!node->next) 18 { 19 return node; 20 } 21 ListNode* fast=node; //快指针走两步 22 ListNode* slow=node; //慢指针走一步 23 ListNode* brek=node; //断点,fast走到末尾时候slow走到中间,刚好传给断点,整个链表分成两块 24 while(fast&&fast->next) 25 { 26 fast=fast->next->next; 27 brek=slow; 28 slow=slow->next; 29 } 30 brek->next=NULL; 31 ListNode* l1=mergesort(node); 32 ListNode*l2=mergesort(slow); 33 return merge(l1,l2); 34 } 35 ListNode* merge(ListNode *l1, ListNode* l2) 36 { 37 //递归到底的情况 38 if(l1==NULL) 39 { 40 return l2; 41 } 42 if(l2==NULL) 43 { 44 return l1; 45 } 46 //分情况递归实现 47 if(l1->val<l2->val) 48 { 49 l1->next=merge(l1->next,l2); 50 return l1; 51 } 52 else 53 { 54 l2->next=merge(l2->next,l1); 55 return l2; 56 } 57 } 58 };
标签:open mamicode rtl val amp 归并排序 hid color 复杂度
原文地址:https://www.cnblogs.com/nxnslc-blog/p/12393872.html