当前位置: 首页 > news >正文

Leetcode—148. 排序链表【中等】

2024每日刷题(171)

Leetcode—148. 排序链表

在这里插入图片描述

C++实现代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* sortList(ListNode* head) {ListNode dummy(0, head);int len = getLen(head);for(int k = 1; k < len; k *= 2) {ListNode* cur = dummy.next;ListNode* tail = &dummy;while(cur) {ListNode* l = cur;ListNode* r = split(l, k);cur = split(r, k);auto[mergeHead, mergeTail] = merge(l, r);tail->next = mergeHead;tail = mergeTail;}}return dummy.next;}
private:int getLen(ListNode* head) {ListNode* cur = head;int len = 0;while(cur) {len++;cur = cur->next;}return len;}pair<ListNode*, ListNode*> merge(ListNode* l, ListNode* r) {ListNode dummy(0);ListNode* tail = &dummy;while(l && r) {if(l->val > r->val) {swap(l, r);}tail->next = l;l = l->next;tail = tail->next;}tail->next = l? l: r;while(tail->next) {tail = tail->next;}return {dummy.next, tail};}ListNode* split(ListNode* head, int k) {while(--k && head) {head = head->next;}ListNode* rest = head ? head->next: nullptr;if(head != nullptr) {head->next = nullptr;}return rest;}
};

运行结果

在这里插入图片描述
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!


http://www.mrgr.cn/news/43121.html

相关文章:

  • Nuxt.js 应用中的 app:mounted 钩子详解
  • C++函数指针类型
  • webGL进阶(一)多重纹理效果
  • 搭建shopify本地开发环境
  • Day01-MySQL数据库介绍及部署
  • 顺序表的使用
  • Kafka与RabbitMQ:消息队列系统的两大巨头
  • 一“填”到底:深入理解Flood Fill算法
  • GitHub入门与实践
  • Linux学习笔记(七):磁盘的挂载与扩展
  • js中map属性
  • 博世IPB - 集成动力制动系统 - One Box集大成者 - 高度自动化驾驶的模块化扩展套件
  • for和while都是循环,他们有什么差异呢?我们在使用过程中如何做选择呢?
  • 带环链表找入环结点及结论证明
  • 【C++】C++对象初探及友元
  • 国内的无人机行业的现状和前景分析
  • 基于springboot的校园物流管理系统(含源码+sql+视频导入教程)
  • 蓝牙定位的MATLAB仿真程序(基于信号强度,平面内的定位,四个蓝牙基站)
  • ThreadLocal底层原理及数据结构详解
  • 华为OD机试 - 垃圾短信识别(Python/JS/C/C++ 2024 E卷 100分)