LeetCode 143. 重排链表(双指针、快慢指针)

题目:

链接:LeetCode 143. 重排链表
难度:中等

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

解题思路:

折半拆分 + 反转链表 + 合并链表。

  1. 快慢指针找到链表的中间点,将其拆分成两半。
  2. 反转后半个链表。
  3. 将前半个链表和反转后的后半个链表合并。

代码:

/*** 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:void reverseList(ListNode*& head) {  // 反转链表if (head->next == nullptr) return;ListNode* p = head;ListNode* q = head->next;p->next = nullptr;ListNode* t;while (q != nullptr) {t = q->next;q->next = p;p = q;q = t;}head = p;}void mergeList(ListNode* L1, ListNode* L2) {  // 合并链表ListNode* head = L1;ListNode* p;while (L2 != nullptr) {p = L1->next;L1->next = L2;L1 = p;p = L2->next;L2->next = L1;L2 = p;}}void reorderList(ListNode* head) {if (head->next == nullptr) return;ListNode* L1 = head;ListNode* L2 = head;while (L2->next != nullptr && L2->next->next != nullptr) {  // 快慢指针找中间节点L2 = L2->next->next;L1 = L1->next;}L2 = L1->next;L1->next = nullptr;L1 = head;reverseList(L2);mergeList(L1, L2);}
};

时间复杂度O(N),空间复杂度O(1)。N为链表长度。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSAPP BOMB LAB part2

bomb lab part2 phase3 汇编语法 switch 汇编版本 switch 例子: switch 使用 jump table movl 指令 cmpl指令是x86汇编语言中的一个比较指令&#xff0c;用于比较两个操作数的值。cmpl指令的格式如下&#xff1a; cmpl source, destinationsource和destination可以是…

RT-Thread 9. VS2012下仿真RT-Thread 和LVGL

1. 在ENV中添加组件 2. 下载组件 3. 生成代码 4. 打开代码 双击project.vcxproj 编译 5. 运行

国际物流常见风险如何规避_箱讯科技

外贸物流是国际贸易的重要环节&#xff0c;其管理和效率的高低直接影响着贸易的成本和效益。因此&#xff0c;外贸企业应该重视物流的组织和管理&#xff0c;提高物流运作的效率。 国际物流基础知识 01什么是“双清包税”和“双清不包税” 双清包税上门又叫双清包税到门&…

新体验:万圣节夜晚的新游戏!--愤怒的南瓜

引言&#xff1a; Chatgpt4.0 所带来的冲击似乎远超出人们想象&#xff0c;网页小游戏《愤怒的南瓜》在昨日&#xff08;万圣节夜晚&#xff09;火爆了外网。一位名为 Javi Lopez 的外国小哥使用 Midjourney、DALL•E 3 和 GPT-4 打开了一个无限可能的世界&#xff0c;重新演绎…

ARL灯塔安装与使用

ARL灯塔安装与使用 1. 系统要求2. ARL灯塔安装2.1. docker环境安装2.1.1. 更新yum包2.1.2. 卸载老版docker2.1.3. 安装docker所需要的依赖包2.1.4. 设置yum源2.1.5. 查看仓库中docker版本2.1.6. 安装docker最新版2.1.7. docker设置2.1.8. docker其它命令 2.2. 安装docker-compo…

爬虫 | 【实践】百度搜索链接爬取,生成标题词云 | 以“AI换脸”为例

目录 &#x1f4da;链接爬取 &#x1f407;流程梳理 &#x1f407;代码实现 &#x1f407;结果 &#x1f4da;词云生成 &#x1f407;代码实现 &#x1f407;结果 &#x1f4da;链接爬取 &#x1f407;流程梳理 总体流程是&#xff1a;构建搜索链接 -> 发送HTTP请求…

每日自动化提交git

目前这个功能&#xff0c;有个前提&#xff1a; 这个git代码仓库&#xff0c;是一个人负责&#xff0c;所以不存在冲突问题 我这个仓库地址下载后的本地路径是&#xff1a;D:\Projects\Tasks 然后我在另外一个地方新建了一个bat文件&#xff1a; bat文件所在目录为&#xff1a…

中心线提取的全卷积网络【IPMI 2019】

论文地址&#xff1a;Excellent-Paper-For-Daily-Reading/medicine at main 类别&#xff1a;医学 时间&#xff1a;2023/11/02 摘要 论文提出了一种将端到端可训练多任务全卷积网络(FCN)与最小路径提取器相结合的中心线提取框架。FCN同时计算中心线距离图和检测分支端点。…

mmcv安装失败

MMCV官网有教程 需要和你的cuda、torch版本相对应 不知道版本可以直接在你的vscode里查看 新建个py文件&#xff1a;import torch;print(torch.version);print(torch.version.cuda) 安装成功

Unity Shader Graph HDRP Reflections Cubemap

主贴图 与 反射 过渡 可调节 因为shader graph 版本原因&#xff0c;略微跟教程不太一样 教程链接&#xff1a; https://www.youtube.com/watch?v943P0dGR4rQ

uniapp循环列表单选框实现单选

目录 图片源码参考最后 图片 源码 参考 大佬 最后 感觉文章好的话记得点个心心和关注和收藏&#xff0c;有错的地方麻烦指正一下&#xff0c;如果需要转载,请标明出处&#xff0c;多谢&#xff01;&#xff01;&#xff01;