题目

143. Reorder List

Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…

You may not modify the values in the list’s nodes, only nodes itself may be changed.

Example 1:

Given 1->2->3->4, reorder it to 1->4->2->3.

Example 2:

Given 1->2->3->4->5, reorder it to 1->5->2->4->3.

解题思路

举个具体例子:1->2->3->4->5->6

  1. 先找出一半的位置,用快慢两个指针可以找出。返回前半部分1->2->3->null,和后半部分链表4->5->6
  2. 翻转后半部分链表6->5->4
  3. 逐个合并前半部分链表,和翻转后的后半部分链表
# https://leetcode.com/problems/reorder-list/
# Definition for singly-linked list.
class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = next
class Solution:def reorderList(self, head: ListNode) -> None:"""Do not return anything, modify head in-place instead."""if not head or not head.next:returnhalfHead, middle = self._splitList(head)reverse = self._reverseList(middle)head = self._mergeLists(halfHead, reverse)# Splits in place a list in two halves, the first half is --> in size than the second.# @return A tuple containing the heads of the two halvesdef _splitList(self, head: ListNode) -> (ListNode, ListNode):slow, fast = head, headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextmiddle = slow.nextslow.next = Nonereturn head, middle# Reverses in place a list.# @return Returns the head of the new reversed listdef _reverseList(self, head: ListNode) -> ListNode:last = NonecurrentNode = headwhile currentNode:nextNode = currentNode.nextcurrentNode.next = lastlast = currentNodecurrentNode = nextNodereturn last# Merges in place two lists# @return The newly merged list.def _mergeLists(self, a: ListNode, b: ListNode) -> ListNode:tail = ahead = aa = a.nextwhile b:tail.next = btail = tail.nextb = b.nextif a:a, b = b, areturn head

算法:间隔重排序链表Reorder List相关推荐

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

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

  2. leetcode算法题--删除排序链表中的重复元素 II

    原题链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 1.map ListNode* deleteD ...

  3. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】...

    [109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...

  4. 下划线间隔数字 排序_面试必备:经典算法动画解析之希尔排序

    哈喽,我是程序员大鹏. 前面我们介绍了冒泡排序.选择排序和插入排序,今天我们来看一下进阶的排序. 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之 ...

  5. 2021字节跳动校招秋招算法面试真题解题报告--leetcode148 排序链表,内含7种语言答案

    148.排序链表 1.题目描述 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序 2.解题报告 针对nlogn的排序算法,主要有快速排序,归并排序和堆排序.其中,堆排序利用了数 ...

  6. 算法---删除排序链表中的重复元素 II

    删除排序链表中的重复元素 II 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 .返回 已排序的链表 . 输入:head = [1,2,3,3,4,4,5] ...

  7. go数组去除重复_让我们一起啃算法----删除排序链表中的重复元素

    删除排序链表中的重复元素(Remove-Duplicates-From-Sorted-List) 题干: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1-> ...

  8. 【实践】端智能在大众点评搜索推荐重排序的应用实践

    猜你喜欢 0.2022年人才市场洞察及薪酬指南1.如何搭建一套个性化推荐系统?2.[免费下载]2022年1月份热门报告3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5. ...

  9. 端智能在大众点评搜索重排序的应用实践

    端智能,是指在移动端设备运行人工智能(AI)应用的技术.本文主要讲述大众点评搜索场景下,在端侧部署大规模深度学习模型进行搜索重排序任务的实践方案,包括端上特征工程.模型迭代思路,以及具体部署优化的过程 ...

  10. leetcode-23 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1-&g ...

最新文章

  1. 关于idea右侧的maven project 如何调出来
  2. POJ 2955 区间DP必看的括号匹配问题,经典例题
  3. PHP获取QQ等级,php仿QQ等级太阳显示函数
  4. 怎么用java跟数据库建立关系,java – 关系和构建数据库
  5. 混合知识实例-本地GIS定位系统Web版(Java、vue、Geoserver)
  6. 创建线程的办法 java 1615387415
  7. java 读取raw文件_Android 读取assets和raw文件内容实例代码
  8. eclipse install software时始终停留在calculating requirements and depen
  9. Vue项目中如何实现用户登录及token验证?
  10. 老调重弹:对kvo的封装思路
  11. ASP.NET Core3.1 入门介绍
  12. 旋转矩阵到旋转角的计算
  13. 动力电池集成关键技术及电池测试与验证
  14. Science:大脑中睡眠的相互关联原因和结果
  15. oracle exp query使用解决-LRM-00101: 未知的参数名
  16. 机器学习7—聚类算法之K-means算法
  17. NETPLIER: Probabilistic Network Protocol Reverse Engineering from Message Traces代码复现记录
  18. 什么是CV2以及如何安装?
  19. mysql 连接间歇性失联解决办法
  20. 照片宽高比怎么设置_用好PPT插件,三分钟就能搞定一个心形照片墙

热门文章

  1. r语言plotmds_利用R语言进行数据分析
  2. Js中Date日期的使用
  3. C# Winform 实现屏蔽键盘的win和alt+F4的实现代码
  4. Android项目实战之高仿网易云音乐创建项目和配置
  5. [淘宝商城首页]-图片灯箱明暗遮罩效果之jquery版
  6. P2P共享经济都可接受 O2O×××有何不可?
  7. 如何在代码里打开Android手机通知状态栏
  8. linkin大话设计模式--命令模式
  9. Linux学习——gcc编译C程序
  10. 流浪北京的日子(二)