【Java|golang】143. 重排链表---快慢指针

chatgpt/2023/9/24 2:36:02

给定一个单链表 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]

提示:

链表的长度范围为 [1, 5 * 104]
1 <= node.val <= 1000

    public void reorderList(ListNode head) {//使用快慢指针找到中间节点ListNode slow=head,fast=slow.next;while (fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;}//后一半反转ListNode lastHalf = reverserLastHalf(slow.next);slow.next=null;ListNode preHalf=head;while (lastHalf!=null){ListNode preTemp = preHalf.next;ListNode lastTemp = lastHalf.next;preHalf.next=lastHalf;lastHalf.next=preTemp;preHalf=preTemp;lastHalf=lastTemp;}}public ListNode reverserLastHalf(ListNode head) {ListNode start=null,temp=null;while (head!=null){temp=head.next;head.next=start;start=head;head=temp;}return start;}

在这里插入图片描述

 public  void reorderList(ListNode head) {ListNode p=head;List<ListNode> list=new ArrayList<ListNode>();p=head;while(p!=null) {list.add(p);p=p.next;}if(list.size()>1) {ListNode p1=list.get(list.size()-1);ListNode p2;p=head;for(int i=1;i<=(list.size()+1)/2-1;i++) {p2=p.next;p.next=p1;p=p1;p.next=p2;p1=list.get(list.size()-1-i);p1.next=null;p=p2;}}}
func reorderList(head *ListNode)  {//使用快慢指针找到中间节点slow,fast:=head,head.Nextfor fast!=nil&&fast.Next!=nil{slow=slow.Nextfast=fast.Next.Next}//后一半反转lastHalf := reverserLastHalf(slow.Next)//合并slow.Next=nilpreHalf:=headfor lastHalf!=nil{preTemp := preHalf.NextlastTemp := lastHalf.NextpreHalf.Next=lastHalflastHalf.Next=preTemppreHalf=preTemplastHalf=lastTemp}
}func reverserLastHalf(head *ListNode) *ListNode {var start,temp *ListNodefor head!=nil{temp=head.Nexthead.Next=startstart=headhead=temp}return start
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5314572.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

StarRocks Friends 广州站精彩回顾

上周六&#xff0c;StarRocks & Friends 活动在羊城广州成功举行&#xff0c;社区的小伙伴齐聚一堂&#xff0c;共同探讨了 StarRocks 在业界的应用实践和湖仓一体等热门话题。 本文总结了技术交流活动的关键内容和视频资料&#xff0c;感谢社区每一位小伙伴的支持和参与&…

【Python】jupyter Linux服务器使用

文章目录 环境使用访问 环境 pip install jupyter 使用 在你想访问的目录下执行&#xff1a; jupyter notebook --ip0.0.0.0jupyter 给出提示&#xff1a; [I 2023-07-28 14:32:43.589 ServerApp] Package notebook took 0.0000s to import [I 2023-07-28 14:32:43.597 Ser…

苍穹外卖黑马1

苍穹外卖项目&#xff08;12天&#xff09;分布如下&#xff1a; 第一章&#xff1a;环境搭建&#xff08;1天&#xff09; day01&#xff1a;项目概述、环境搭建 第二章&#xff1a;基础数据维护&#xff08;3天&#xff09; day02&#xff1a;员工管理、分类管理 day03: 菜品…

webrtc 的TaskQueue() 任务队列

TaskQueue 定义 见文件&#xff1a;rtc_base\task_queue.h 具体实现 class RTC_LOCKABLE RTC_EXPORT TaskQueue {public:// TaskQueue priority levels. On some platforms these will map to thread// priorities, on others such as Mac and iOS, GCD queue priorities.us…

PHP8的常量-PHP8知识详解

常量和变量是构成PHP程序的基础&#xff0c;在PHP8中常量的这一节中&#xff0c;主要讲到了定义常量和预定义常量两大知识点。 一、定义常量 定义常量也叫声明常量。在PHP8中&#xff0c;常量就是一个标识符&#xff08;名字&#xff09;&#xff0c;一旦定义&#xff08;声明&…

笨办法学python3进阶篇pdf,笨办法学python3pdf完整版

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;笨办法学python 3电子书下载&#xff0c;笨办法学python3pdf完整版&#xff0c;今天让我们一起来看看吧&#xff01; 1、笨方法学python习题43 按照你说的 Map是一个类&#xff0c;scene_map是一老胡镇个类实例 scene_…

Keepalived 在CentOS 7安装并配置监听MySQL双主

keepalived安装 MySQL双主配置请看这里&#xff1a;https://tongyao.blog.csdn.net/article/details/132016200?spm1001.2014.3001.5502 128、129两台服务器安装步骤相同&#xff0c;配置文件不同&#xff0c;下面有介绍。 1.安装相关依赖包&#xff0c;并下载keepalived安…

C++STL库中queue

文章目录 queue的介绍 queue的常用接口 queue的模拟实现 priority_queue的介绍 priority_queue的常用接口 priority_queue的模拟实现 容器适配器 deque的介绍 仿函数 一、queue的介绍 1. 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其…
推荐文章