欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

单链表排序

时间:2023-04-28

快排:

class Solution {public: ListNode* solve(ListNode* head, ListNode* pend){ if(head==NULL||head->next==pend) return head; int val = head->val; ListNode* p = head; ListNode* q = p->next; while(q!=pend){ if(q->val < val){ p = p->next; swap(p->val, q->val); } q = q->next; } swap(head->val, p->val); return p; } void quick_sort(ListNode* head, ListNode* pend){ if(head==pend) return; ListNode* p = solve(head, pend);//找出枢轴 quick_sort(head, p); quick_sort(p->next, pend); } ListNode* sortInList(ListNode* head) { // write code here quick_sort(head, NULL); return head; }};

利用vector和sort进行排序

class Solution {public: ListNode* sortInList(ListNode* head) { vector vec; ListNode* cur = head; // 1.构建vector while(cur) { vec.push_back(cur->val); cur = cur->next; } // 2.vector排序 sort(vec.begin(), vec.end()); // 3.构建链表 ListNode* dummy = new ListNode(0); ListNode* res = new ListNode(0); dummy->next = res; for(int i : vec) { res->next = new ListNode(i); res = res->next; } res->next = nullptr; return dummy->next->next; }};

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。