给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]
输出:[1,4,2,3]
示例 2:输入:head = [1,2,3,4,5]
输出:[1,5,2,4,3]思路:先将链表拆分成前后两半 A 和 B。后一半 B 逆转成 C。再将 A 和 C 交叉合并。
例如:1->2->3->4->5 拆分成:A=1->2->3,B=4->5。然后把 B 逆转 成 C=5->4。最后 A 和 C 交叉合并成 D=1->5->2->4->3。# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reorderList(self, head: ListNode) -> None:"""Do not return anything, modify head in-place instead."""if head == None or head.next == None:return# 1. 找到链表的中点fast = headslow = headwhile fast.next and fast.next.next:fast = fast.next.nextslow = slow.nextmid = slow# 2. 后半段指针反转r_head = mid.nextmid.next = Nonecur = r_headpre = Nonewhile cur:nxt = cur.nextcur.next = prepre = curcur = nxtreverse_r_head = pre# 3. 后半段插入到前半段l = headr = reverse_r_headwhile r:l_nxt = l.nextr_nxt = r.nextr.next = l.nextl.next = rl = l_nxtr = r_nxtreturn head

25. Leetcode 143. 重排链表 (链表-基础操作类-重排链表)相关推荐

  1. 24. Leetcode 61. 旋转链表 (链表-基础操作类-旋转链表)

    给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置.示例 1:输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例 2:输入:hea ...

  2. 23. Leetcode 24. 两两交换链表中的节点 (链表-基础操作类-交换链表)

    给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换).示例 1:输入:head = [1,2,3,4] 输出:[2,1,4 ...

  3. 23. Leetcode 86. 分隔链表 (链表-基础操作类-分隔链表)

    给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前.你应当 保留 两个分区中每个节点的初始相对位置.示例 1:输入: ...

  4. 22. Leetcode 237. 删除链表中的节点 (链表-基础操作类-删除链表的节点)

    请编写一个函数,用于 删除单链表中某个特定节点 .在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 .题目数据保证需要删除的节点 不是末尾节点 .示例 1:输入: ...

  5. 21. Leetcode 203. 移除链表元素 (链表-基础操作类-删除链表的节点)

    给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 .示例 1:输入:head = [1,2,6,3,4,5,6] ...

  6. python3实现链表的基础操作

    python3实现链表的基础操作 实现的步骤: 一.建立链表模型 二.遍 历 链 表 三.获取链表长度 四.追 加 节 点 五.插 入 操 作 六.主 调 函 数 分析: (1)建立链表模型: 首先我 ...

  7. 单链表的基础操作(带头结点)

    链表(带头结点)的基础操作:(王道书的实现,附带main函数) 1.链表的初始化 2.头插法建立单链表 3.尾插法建立单链表 4.指定结点的前插 5.指定结点的后插 6.按位查询 7.按值查询 8.链 ...

  8. 数据结构单链表的基础操作(C语言)

    效果如图: 代码及详情如下:(文末总结) 目录 //主函数 //菜单 //创建链表 //插入结点 //删除结点 //查找结点 //链表长度 //打印链表 //清空链表 //逆置链表 //删除偶数元素结 ...

  9. 单链表的基础操作(头插法、尾插法、插入和删除)

    一.链表的建立(头插法和尾插法) 1.头插法:把后建立的结点插在头部.用这种方法建立起来的链表的实际顺序与输入顺序刚好向反,输出时为倒序! 下面附上代码: struct node *headcreat ...

最新文章

  1. C语言读写配置文件--转载
  2. 第十周项目实践 哈夫曼树的建立哈夫曼编码
  3. Elasticsearch 常用运维命令(持续更新)
  4. M2第三天DailyScrum——PM(李忠)
  5. 【微信小程序】目前最全的《Java面试题及解析》
  6. 20个最佳WordPress SEO插件
  7. 吊打线段树的超级树状数组
  8. .net控件开发系列
  9. 用户自定义变量、系统变量、环境变量
  10. mysql多张表join_Mysql 多表连接查询 inner join 和 outer join 的使用
  11. python抓取微信公众号文章_如何使用python3抓取微信公众号文章,了解一下?
  12. Java基于spingboot+vue智慧小区物业管理系统源码 智慧小区管理系统源码
  13. 系统自动校时后发广播android,校园定时播放软件
  14. jQuery Word Export: missing dependency (FileSaver.js)
  15. windows网络和共享中心“查看基本网络信息并设置连接”为“未知”的解决方案...
  16. ISP算法:gamma矫正
  17. 计算机方面的顶级会议
  18. dout java_java之 ------ 文件的输入、输出(一)
  19. apos mysql_启动MySQL报错:ERROR 2003 (HY000): Canapos;t connect to MySQL server on apos;localhostapos;...
  20. 解决Laydate在弹出层中一闪而过的问题

热门文章

  1. 阿里云获得SAP HANA 2T实例公共云认证
  2. Scrum 冲刺博客第四篇
  3. 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
  4. mysql cluster 安装NDB二进制版本
  5. ASUS华硕笔记本电脑的数字小键盘按什么健切换?
  6. Oracle cursor_sharing 参数 详解
  7. 使用VMware Server迁移证券公司的Netware服务器
  8. HTTP文件下载原理(OTA 下载 断点续传)
  9. 百面机器学习知识体系
  10. 大创项目实施方案模板范文_27篇互联网电商创业计划书范文+34个电商行业商业计划书模板下载...