Leetcode 148. 排序链表 解题思路及C++实现
解题思路:
对链表进行归并排序,使用 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++实现相关推荐
- 链表排序---迭代版本归并算法 + [leetcode]148. 排序链表
前言: 对于链表来说,排序首选应该是归并算法 维基百科上有归并算法的迭代版本和递归版本 基于数组实现的. https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B ...
- 【编程4】插入排序+快速排序+LeetCode.148(排序链表)
文章目录 一.排序链表 1.题目描述--LeetCode.148 2.分析 (1)一般的快排 (2)解题思路 3.实现 二.排序算法 三.插入排序 1.基本思想 (1)过程概述 (2)具体算法描述: ...
- Leetcode 160. 相交链表 解题思路及C++实现
解题思路: 先将两个链表构建成一个环,定义两个快慢指针,当它们相遇时,将fast指针从头结点往后遍历,每次走一步,当这两个指针再次相遇时,该节点就是相交节点. /*** Definition for ...
- Leetcode 206. 反转链表 解题思路及C++实现
解题思路: 利用三个指针 left.right.tmp.left指向的是每一步反转之后的头结点,right指向的是当前需要反转的节点,tmp指向的是下一步需要反转的节点. /*** Definitio ...
- Leetcode 141. 环形链表 解题思路及C++实现
解题思路: 定义快慢两个指针,当指针所指节点是同一个时,说明出现了环. /*** Definition for singly-linked list.* struct ListNode {* int ...
- LeetCode 148. 排序链表(归并排序、快速排序)
文章目录 1. 题目 2. 解题 2.1 归并排序 2.2 快速排序 1. 题目 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1:输入: 4->2-> ...
- 83. Leetcode 148. 排序链表 (排序)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 .示例 1:输入:head = [4,2,1,3] 输出:[1,2,3,4] 示例 2:输入:head = [-1,5,3,4, ...
- leetcode 148. 排序链表(归并排序)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 . 进阶: 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? 示例 1: 输入:head = ...
- LeetCode —— 148. 排序链表(Python)
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序. 示例 1: 输入: 4->2->1->3 输出: 1->2->3->4 示例 2: 输入 ...
最新文章
- 黑客道诠释完整版1-7
- ibatis 中isNull, isNotNull与isEmpty, isNotEmpty区别
- OSG使用更新回调来更改模型
- tomcat的端口修改
- asp.net 去除字符串右侧的最后一个字符
- c语言中const的作用面试,C语言const关键字作用
- es和oracle,Oracle和Elasticsearch数据同步
- 支持向量机的前世与今生
- 深入浅出Go Runtime
- 魔兽世界私服Trinity,从源码开始
- 无线中继后要不要关闭dhcp服务器,tplink无线路由器WDS桥接后副路由开启DHCP 好还是关闭好。...
- spring aop分析(一)
- 2021-2027全球与中国低轨道卫星市场现状及未来发展趋势
- ffmpeg 多视频 画中画
- 三星D828刷机教程,完全经典版(附图)
- 7 Workflow
- html和css火焰特效,CSS实现火焰特效
- 武汉Uber优步司机奖励政策
- 方克鼓校总部加盟政策
- IntelliJ:idea取消启动时的默认工作空间,打开欢迎页面