解题思路:

对链表进行归并排序,使用 fast 和 slow 两个指针,遍历一次链表,就能将链表切分为两半,然后使用归并排序的方法。

/*** 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 == NULL || head->next == NULL) return head;ListNode* fast = head;ListNode* slow = head;while(slow->next != NULL && fast->next != NULL && fast->next->next != NULL){fast = fast->next->next;slow = slow->next;}ListNode* last = slow->next;slow->next = NULL; //切断成两个链表//对两个链表递归做排序ListNode* pre = sortList(head);ListNode* las = sortList(last);//对排好序的两个链表进行合并return merge(pre, las);}ListNode* merge(ListNode* l1, ListNode* l2){ListNode* tmp = new ListNode(0);ListNode* root = tmp;while(l1 != NULL && l2 != NULL){if(l1->val > l2->val){tmp->next = l2;l2 = l2->next;tmp = tmp->next;}else{tmp->next = l1;l1 = l1->next;tmp = tmp->next;}}//对某一个链表中多出来的数,直接接在tmp后面if(l2 == NULL) tmp->next = l1;if(l1 == NULL) tmp->next = l2;return root->next;}
};

Leetcode 148. 排序链表 解题思路及C++实现相关推荐

  1. 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表

    前言: 对于链表来说,排序首选应该是归并算法 维基百科上有归并算法的迭代版本和递归版本 基于数组实现的. https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B ...

  2. 【编程4】插入排序+快速排序+LeetCode.148(排序链表)

    文章目录 一.排序链表 1.题目描述--LeetCode.148 2.分析 (1)一般的快排 (2)解题思路 3.实现 二.排序算法 三.插入排序 1.基本思想 (1)过程概述 (2)具体算法描述: ...

  3. Leetcode 160. 相交链表 解题思路及C++实现

    解题思路: 先将两个链表构建成一个环,定义两个快慢指针,当它们相遇时,将fast指针从头结点往后遍历,每次走一步,当这两个指针再次相遇时,该节点就是相交节点. /*** Definition for ...

  4. Leetcode 206. 反转链表 解题思路及C++实现

    解题思路: 利用三个指针 left.right.tmp.left指向的是每一步反转之后的头结点,right指向的是当前需要反转的节点,tmp指向的是下一步需要反转的节点. /*** Definitio ...

  5. Leetcode 141. 环形链表 解题思路及C++实现

    解题思路: 定义快慢两个指针,当指针所指节点是同一个时,说明出现了环. /*** Definition for singly-linked list.* struct ListNode {* int ...

  6. LeetCode 148. 排序链表(归并排序、快速排序)

    文章目录 1. 题目 2. 解题 2.1 归并排序 2.2 快速排序 1. 题目 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1:输入: 4->2-> ...

  7. 83. Leetcode 148. 排序链表 (排序)

    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 .示例 1:输入:head = [4,2,1,3] 输出:[1,2,3,4] 示例 2:输入:head = [-1,5,3,4, ...

  8. leetcode 148. 排序链表(归并排序)

    给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 . 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 示例 1: 输入:head = ...

  9. LeetCode —— 148. 排序链表(Python)

    在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入 ...

最新文章

  1. 黑客道诠释完整版1-7
  2. ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
  3. OSG使用更新回调来更改模型
  4. tomcat的端口修改
  5. asp.net 去除字符串右侧的最后一个字符
  6. c语言中const的作用面试,C语言const关键字作用
  7. es和oracle,Oracle和Elasticsearch数据同步
  8. 支持向量机的前世与今生
  9. 深入浅出Go Runtime
  10. 魔兽世界私服Trinity,从源码开始
  11. 无线中继后要不要关闭dhcp服务器,tplink无线路由器WDS桥接后副路由开启DHCP 好还是关闭好。...
  12. spring aop分析(一)
  13. 2021-2027全球与中国低轨道卫星市场现状及未来发展趋势
  14. ffmpeg 多视频 画中画
  15. 三星D828刷机教程,完全经典版(附图)
  16. 7 Workflow
  17. html和css火焰特效,CSS实现火焰特效
  18. 武汉Uber优步司机奖励政策
  19. 方克鼓校总部加盟政策
  20. IntelliJ:idea取消启动时的默认工作空间,打开欢迎页面

热门文章

  1. mysql sql应用_MySQL数据库应用(5)SQL语言(2)
  2. 系统中多种隐藏超级用户添加方法第1/2页
  3. CentOS7安装Zabbix
  4. 触发器 :new和 :old的使用
  5. 乌班图14.04安装搜狗输入法
  6. 【Ubuntu】安装Java和Eclipse
  7. asp.net 导出excel带图片
  8. win7 telnet命令无法使用
  9. CSDN移动助手v0.01发布
  10. 移动机器人平台的坐标系---map,odom,base_link