leetcode 148. 排序链表(c++)
发布时间:2020-12-16 10:46:47 所属栏目:百科 来源:网络整理
导读:在?O(n?log?n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4-2-1-3 输出: 1-2-3-4 示例 2: 输入: -1-5-3-4-0 输出: -1-0-3-4-5 /* * * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN
在?O(n?log?n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 输入: 4->2->1->3 输入: -1->5->3->4->0 /** * 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 || !head->next) return head; ListNode *slow = head,*fast = head,*pre = head; while (fast && fast->next) { pre = slow; slow = slow->next; fast = fast->next->next; } pre->next = NULL; return merge(sortList(head),sortList(slow)); } ListNode* merge(ListNode* l1,ListNode* l2) { ListNode *dummy = new ListNode(-1); ListNode *cur = dummy; while (l1 && l2) { if (l1->val < l2->val) { cur->next = l1; l1 = l1->next; } else { cur->next = l2; l2 = l2->next; } cur = cur->next; } if (l1) cur->next = l1; if (l2) cur->next = l2; return dummy->next; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |