LeetCode148:Sort List
题目:
Sort a linked list in O(n log n) time using constant space complexity.
解题思路:
根据题目要求,可知只能用归并排序,其他排序算法要么时间复杂度不满足,要么空间复杂度不满足
实现代码:
#include <iostream> using namespace std; /* Sort a linked list in O(n log n) time using constant space complexity. */ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ struct ListNode { int val; ListNode *next; ListNode(int x):val(x), next(NULL) { } }; void addNode(ListNode* &head, int val) { ListNode *newNode = new ListNode(val); if(head == NULL) { head = newNode; } else { newNode->next = head; head = newNode; } } void PrintList(ListNode *root) { ListNode *head = root; while(head != NULL) { cout<<head->val<<"\t"; head = head->next; } cout<<endl; } class Solution { public: ListNode *sortList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *quick = head; ListNode *slow = head; while(quick->next && quick->next->next)//通过两个指针,一个走两步、一个走一步,获得链表的中间节点 { slow = slow->next; quick = quick->next->next; } quick = slow; slow = slow->next; quick->next = NULL;//将链表的前半段进行截断 ListNode *head1 = sortList(head); ListNode *head2 = sortList(slow); return merge(head1, head2); } //归并两个有序链表 ListNode *merge(ListNode *head1, ListNode *head2) { if(head1 == NULL) return head2; if(head2 == NULL) return head1; ListNode *newHead = NULL; if(head1->val < head2->val) { newHead = head1; head1 = head1->next; } else { newHead = head2; head2 = head2->next; } ListNode *p = newHead; while(head1 && head2) { if(head1->val < head2->val) { p->next = head1; head1 = head1->next; } else { p->next = head2; head2 = head2->next; } p = p->next; } if(head1) p->next = head1; if(head2) p->next = head2; return newHead; } }; int main(void) { ListNode *head = new ListNode(5); addNode(head, 3); addNode(head, 10); addNode(head, 15); PrintList(head); Solution solution; head = solution.sortList(head); PrintList(head); return 0; }
-----------------------我和我追猪的梦-----------------------------------------------------------------
作者:mickole

分类:
LeetCode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!