Leetcode-高频面试题-143.重排链表

news2024/11/26 18:22:49

 解法都在代码里,不懂就留言或者私信

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    /**本题基本思路:先把链表分为前半部分和后半部分,如果不是偶数就前半部分多一个
    然后把后半部分逆序,然后前后一个一个的交替连接*/
    public void reorderList(ListNode head) {
        if(head == null || head.next == null) {
            return;
        }
        /**先过一下链表统计一下节点数 */
        int count = 0;
        ListNode cur = head;
        while(cur != null) {
            count ++;
            cur = cur.next;
        }
        /**把cur恢复成指向head*/
        cur = head;
        /**count变成(count-1)/2 */
        count = (count - 1)/2;
        while(count > 0) {
            cur = cur.next;
            count --;
        }
        /**出while循环的时候cur指向的是左边部分的终点,现在开始分离链表的工作 */
        ListNode rightHead = cur.next;
        cur.next = null;
        /**再次把cur恢复成head */
        cur = head;
        rightHead = reverse(rightHead);
        /**head肯定是要作为头的,我们现在要用一个left指针指向head的下个节点(左边部分的下一个节点) */
        ListNode left = head.next;
        ListNode right = rightHead;
        /**当前已经串起来的最后一个节点 */
        ListNode curNode = head;
        while(left != null) {
            /**每次循环我们只处理两个数,先连右边部分下一个,然后右边部分下一个指向左边下一个
            这个过程就造成了右边部分下一个指针发生变化,需要提前存一下,左边部分是我们串的最后一个节点
            它的next不变,不用执行这个操作 */
            ListNode rightNext = right.next;
            /**之前最后一个节点(来自左边)连接右边下一个节点 */
            curNode.next = right;
            /**右边下一个的next指向左边下一个 */
            right.next = left;
            /**本次循环的最后一个节点作为curNode(最后一个被串起来的节点) */
            curNode = left;
            /**左右都跳下一个 */
            right = rightNext;
            left = left.next;    
        }
        /**如果没有用完,只能是右边没有用完 */
        if(right != null) {
            curNode.next = right;
            right.next = null;
        }
    }
    /**经典面试题-反转链表 */
    public ListNode reverse(ListNode head) {
        ListNode cur = head;
        ListNode pre = null;
        ListNode next = null;
        while(cur != null) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ajax基础案例

接口文档 欢迎使用 - AJAX阶段 地区查询 图解 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

《黑神话:悟空》发售后快手游戏笔记本电脑GMV日环比增长40%

一、美联储9月降息预期升温 昨夜美股三大股指在震荡中收涨&#xff0c;市场情绪受到美联储7月会议纪要提振。纪要显示&#xff0c;美联储官员普遍倾向于9月降息&#xff0c;多位官员认为当前利率水平已对经济构成限制。此消息推动美股上涨&#xff0c;并带动金价创新高&#xf…

线程互斥锁

互斥锁 类型 pthread_mutex_t 互斥锁基本操作 函数描述[[pthread_mutex_initpthread_mutex_init]]初始化互斥锁[[pthread_mutex_lockpthread_mutex_lock]]阻塞申请互斥锁[[pthread_mutex_unlockpthread_mutex_unlock]]释放互斥锁[[pthread_mutex_trylockpthread_mutex_tryl…

全网最全PMP备考攻略(附答题技巧)

01为什么要考PMP 大家都是成年人&#xff0c;提出问题的目的是为了解决问题。所以问为什么&#xff0c;这个出发点就是错的。 你要知道&#xff0c;正确的知识必然是有用处的。 还是有人会觉得从小学到大学甚至研究生毕业&#xff0c;你学的东西都没有用武之地&#xff1f; …

写论文找不到灵感?ChatGPT能提供的一些帮助

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术写作过程中&#xff0c;许多读者常常会面临一个问题——找不到灵感。面对庞大的文献和复杂的研究方向&#xff0c;往往感到无从下手。随着人工智能技术的发展&#xff0c;像ChatG…

滚雪球学Java(88):连接无限,资源有度:JavaSE数据库连接池深度解析,有两下子!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE啦&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好习惯&#…

“探索消费增值模式:绿色消费与积分回馈的双重盛宴“

大家好&#xff0c;我是吴军&#xff0c;来自一家知名的软件开发企业&#xff0c;担任产品经理的角色。今天&#xff0c;我想和大家探讨一个新兴的商业模式——消费增值模式&#xff0c;它在市场上正逐渐崭露头角。 近年来&#xff0c;随着环保和可持续发展日益受到消费者的关注…

HT3S-ECS-MTP网关支持与倍福C6015控制器PLC环网通讯

倍福控制器C6015通过HT3S-ECS-MTP网关进行ETHERCAT环网通讯 北京中科易联科技有限公司 1、概述 本文描述倍福C6015控制器与网关HT3S-ECS-MTP测试EtherCAT环网&#xff0c;并进行数据交换的组态过程及运行结果。使用到的软硬件列表如下&#xff1a; 1台倍福C6015控制器, 使用…

【Qt笔记】Qt界面显示时间

目录 一、前言 二、基本概念 三、代码实现 1. 获取本地时间&#xff0c;并将其转换成自己想要的格式 2.创建一个QLabel控件用于显示时间字符串 3.创建QTimer定时器更新时间 四、优化 1. 格式优化 1.1 初始化 1.2 获取星期 1.3 更改格式 1.4 定时器超时函数 1.5 …

泛微基于华为仓颉编程语言开发公文交换系统 推动办公软件全面国产化

2024年6月21日下午&#xff0c;华为终端BG软件部总裁龚体先生在华为开发者大会主题演讲《鸿蒙原生应用&#xff0c;全新出发&#xff01;》中向全球开发者介绍了华为自研仓颉编程语言&#xff0c;并发布了HarmonyOS NEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言…

比实物资产更重要的软硬件资产管理系统你了解吗?

“运筹帷幄之中&#xff0c;决胜千里之外。” 此言非但道出了战略谋划的重要性&#xff0c;亦在今日之商业世界&#xff0c;隐喻了信息管理对于企业竞争力的深远影响。 在数字化浪潮席卷全球的今天&#xff0c;企业的资产已不仅仅局限于厂房、设备、库存等实物形态&#xff0…

Console口密码又忘了?这样操作不尴尬

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 在日常的网络管理和维护工作中&#xff0c;Console端口是技术人员访问网络设备&#xff08;如路由器、交换机…

简单步骤获取IP地址SSL 证书

在网络安全中&#xff0c;SSL证书在保护用户浏览器和Web服务器之间交换的敏感信息方面发挥着至关重要的作用。 但是&#xff0c;如果您不仅想保护域名&#xff0c;还想保护特定的IP地址&#xff0c;该怎么办&#xff1f;您可以为IP地址获取SSL证书吗&#xff1f; 简短的回答是…

IDEA 的全局搜索快捷键冲突

系统&#xff1a;MacOS 在IDEA中操作全局搜索&#xff1a;commandshiftF&#xff0c;会弹出来IDEA自己的搜搜框&#xff0c;还有一个访达的搜索框。 取消系统的默认搜索&#xff1a; 【系统设置-辅助功能-键盘-键盘设置-键盘快捷键】 【服务》搜索&#xff1a;取消勾选 聚焦…

掌握 Vue 3 的 <script setup>:高效开发的必备技巧

<script setup> 是 Vue 3 引入的一种新的 <script> 标记的用法&#xff0c;其本质是一个语法糖。它极大简化了单文件组件&#xff08;SFC&#xff09;的开发体验&#xff0c;目的是让代码更简洁、易读&#xff0c;同时减少模板和逻辑之间的重复。 1. 基本用法 &l…

Issue with OpenAI API key while using it in Windows

题意&#xff1a;“在 Windows 上使用 OpenAI API 密钥时遇到的问题” 问题背景&#xff1a; I have to fine-tune the OpenAI model on my custom dataset. I have created the dataset in jsonl format. I use the following commands on windows command line: “我需要在…

docker 安装 oracle11g

#创建oracle11g docker run -d --name myoracle11g -p 1522:1521 akaiot/oracle_11g #登录到oracle,要先docker ps 查看具体的docker id docker exec -it 22222222 bash su root 密码&#xff1a;helowin # 设置环境变量 vi /etc/profile export ORACLE_HOME/home/oracle/ap…

谷粒商城实战笔记-236~238-商城业务-购物车-环境搭建

文章目录 一&#xff0c;236-商城业务-购物车-环境搭建二&#xff0c;237-商城业务-购物车-数据模型分析三&#xff0c;238-商城业务-购物车-VO编写 一&#xff0c;236-商城业务-购物车-环境搭建 这一节的主要内容&#xff1a; ①创建购物车模块②上传静态资源到nginx③复制静…

二分+数学,CF 689C - Mike and Chocolate Thieves

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 689C - Mike and Chocolate Thieves 二、解题报告 1、思路分析 考虑一个…

钥匙失效、门卡死?看如何用电脑远程解救作业

不少人都在自己的电脑上安排了远程控制软件&#xff0c;以便在紧急情况下可以相互远程操作。原本这样的设置只是为了应对偶尔的加班需求&#xff0c;没想到今天它发挥了意想不到的作用。 就在刚才&#xff0c;一阵突如其来的狂风“咣”地一声将门牢牢锁死&#xff0c;钥匙也无法…