题目:
时间复杂度:O(nlogn),空间复杂度:O(1)
struct ListNode{
int val;
ListNode* next;
ListNode(): val(0), next(nullptr) {}
ListNode(int _val): val(_val), next(nullptr) {}
ListNode(int _val, ListNode* _next): val(_val), next(_next) {}
};
class Solution {
public:
ListNode* sortList(ListNode* head) {
return mergesort(head);
}
//归并排序链表
ListNode* mergesort(ListNode* head){
if(!head || !head->next) return head;
ListNode* end1 = getmid(head);
ListNode* rightlist = mergesort(end1->next);
end1->next = nullptr; //在对左子链表进行排序前要断开和右子链表的链接
ListNode* leftlist = mergesort(head);
return mergetwo(leftlist, rightlist);
}
//合并两个有序链表
ListNode* mergetwo(ListNode* l1, ListNode* l2){
ListNode* dummy = new ListNode(0);
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;
}
cur->next = l1 ? l1 : l2;
return dummy->next;
}
//取得中间节点
ListNode* getmid(ListNode* head){
ListNode* slow = head;
ListNode* fast = head;
while(fast->next&&fast->next->next){
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具