【C++】LeetCode:LCR 026. 重排链表

news/2025/3/22 1:05:42

题干

LCR 026. 重排链表

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

 L0 → L1 → … → Ln-1 → Ln 
请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

解法:寻找链表中点 + 链表逆序 + 合并链表

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/class Solution {
public:// 获取链表的中间节点ListNode *getMid(ListNode* head) {ListNode* fast = head;ListNode* slow = head;while (fast != nullptr && fast->next != nullptr) {fast = fast->next->next;slow = slow->next;}return slow;}// 反转链表ListNode *revers(ListNode* head) {ListNode *pre = nullptr;ListNode *curr = head;while (curr != nullptr) {ListNode *next = curr->next;curr->next = pre;pre = curr;curr = next;}return pre;}// 合并两个链表void merge(ListNode *l1, ListNode *l2) {ListNode *l1_tmp;ListNode *l2_tmp;while (l1 != nullptr && l2 != nullptr) {l1_tmp = l1->next;l2_tmp = l2->next;l1->next = l2;l1 = l1_tmp;l2->next = l1;l2 = l2_tmp;}}// 重新排序链表void reorderList(ListNode* head) {if (head == nullptr || head->next == nullptr) {return;}ListNode* mid = getMid(head);ListNode *rightHead = mid->next;mid->next = nullptr;ListNode *reversedRight = revers(rightHead);merge(head, reversedRight);}
};

解析:

这道题综合了前几道题比较基础的算法,正好可以用来复习。

1.找到原链表的中点(参考「876. 链表的中间结点」)。
2.将原链表的右半端反转(参考「206. 反转链表」)。
3.合并两个链表。


https://dhexx.cn/news/show-5466330.html

相关文章

IntelliJ+SpringBoot项目实战(十七)--在SpringBoot中整合SpringSecurity和JWT(下B)

八、SpringSecurity实现权限控制 在上节中介绍了SpringSecurity登录时从数据库中验证用户以及获取用户的权限集合。本文介绍如何进行权限控制。 在上节中,虽然实现了从数据库中获取用户并验证密码,但是还没有实现权限的控制,只是将用…

龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2

1. 描述 LT6912是一款高性能的HDMI2.0转HDMI和LVDS和MIPI转换器。 HDMI2.0 输入和输出均支持高达 6Gbps 的数据速率,为4k60Hz视频提供足够的带宽。此外,还支持 HDCP2.2 进行数据解密(无数据 加密)。 对于 LVDS 输出&#xff0c…

计算属性和监听属性

Vue.js 中的计算属性与监听属性 Vue.js 是一个流行的前端框架,它提供了许多强大的特性来简化 Web 应用的开发。其中,计算属性(Computed Properties)和监听属性(Watchers)是两个非常重要的概念,…

恒创科技:服务器操作系统和客户端操作系统之间的区别

客户端操作系统和服务器操作系统是两种不同的操作系统,旨在满足计算机网络环境中的特定目的。虽然每种类型的操作系统在基本功能方面都有一些相似之处,但它们针对不同的用例进行了优化,并具有针对其特定角色量身定制的特定功能。 什么是服务器…

【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法

毕业设计排版时,一般要求每章节的起始页为奇数页,空白页不显示页眉和页脚。具体做法如下: 1 Word 在一个章节的内容完成后,在【布局】中,点击【分隔符】,然后选择【奇数页】 这样在下一章节开始的时&…

物联网智能项目:智能家居系统的设计与实现

物联网(Internet of Things,IoT)技术正在迅速改变我们的生活方式,特别是在智能家居、工业自动化、环境监控等领域。物联网智能项目通过将设备、传感器、控制器等通过互联网连接,实现设备间的智能交互,带来高效、便捷和智能的体验。本文将介绍一个典型的物联网智能家居项目…

Xilinx PCIe高速接口入门实战(一)

引言:本文对Xilinx 7 Series Intergrated Block for PCI Express PCIe硬核IP进行简要介绍,主要包括7系列FPGA PCIe硬核资源支持、三IP硬核差异、PCIe硬核资源利用等相关内容。 1. 概述 1.1 7系列FPGA PCIe硬件资源支持 7系列FPGA对PCIe接口最大支持如…

一文了解 Hugging Face 平台

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ Hugging Face 是一家专注于人工智能与自然语言处理(NLP)的科技公司,致力于推动先进的机器学习技术变得更加开放、易用并实现协作。对于普通公众而言,它提…

lambda strem流表达式处理工具

一个通用的lambda stream流处理工具, 包含了工作中绝大部分场景常用的使用方式 import java.math.BigDecimal; import java.util.*; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; import java.util.funct…

Springboot 修改post请求接口入参或重新赋值

前言 很久之前写过一篇就是自动填充接口参数的,利用的 HandlerMethodArgumentResolver 自定义注解 Springboot Controller接口默认自动填充 业务实体参数值_springboot设置入参默认值-CSDN博客 现在这一篇也差不多,达到的目的就是重新去给post请求的参数…