LeetCode //C - 143. Reorder List

143. Reorder List

You are given the head of a singly linked-list. The list can be represented as:

L0 → L1 → … → Ln - 1 → Ln
Reorder the list to be on the following form:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
You may not modify the values in the list’s nodes. Only nodes themselves may be changed.
 

Example 1:

在这里插入图片描述

Input: head = [1,2,3,4]
Output: [1,4,2,3]

Example 2:

在这里插入图片描述

Input: head = [1,2,3,4,5]
Output: [1,5,2,4,3]

Constraints:
  • The number of nodes in the list is in the range [ 1 , 5 ∗ 1 0 4 ] [1, 5 * 10^4] [1,5104].
  • 1 <= Node.val <= 1000

From: LeetCode
Link: 143. Reorder List


Solution:

Ideas:
  1. Find the middle of the linked list: We can use the fast and slow pointer technique to find the middle node.
  2. Reverse the second half of the linked list: Once we find the middle, we need to reverse the second half of the list.
  3. Merge the two halves: Finally, we merge the two halves by alternating nodes from the first half and the reversed second half.
Code:
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
void reorderList(struct ListNode* head) {if (!head || !head->next) return;// Step 1: Find the middle of the linked liststruct ListNode *slow = head, *fast = head;while (fast->next && fast->next->next) {slow = slow->next;fast = fast->next->next;}// Step 2: Reverse the second half of the liststruct ListNode *prev = NULL, *curr = slow->next, *next = NULL;while (curr) {next = curr->next;curr->next = prev;prev = curr;curr = next;}slow->next = NULL; // Cut the list into two halves// Step 3: Merge the two halvesstruct ListNode *first = head, *second = prev;while (second) {struct ListNode *tmp1 = first->next, *tmp2 = second->next;first->next = second;second->next = tmp1;first = tmp1;second = tmp2;}
}// Helper function to create a new ListNode
struct ListNode* newNode(int val) {struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));node->val = val;node->next = NULL;return node;
}// Helper function to print the linked list
void printList(struct ListNode* head) {while (head) {printf("%d -> ", head->val);head = head->next;}printf("NULL\n");
}

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

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

相关文章

MVCC机制

个人理解篇&#xff0c;不一定对&#xff0c;应付面试的时候看的 MVCC(Multi-Version Concurrency Control)全称多版本并发控制&#xff0c;主要用在隔离模式下的提交读、可重复读模式下&#xff0c;依赖于readview和undolog链 一、readview 1、结构 字段 备注 m_ids 活跃…

代码随想录——合并二叉树(Leetcode617)

题目链接 层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) …

工业制造企业为什么要进行数字化转型

人人都在谈数字化转型&#xff0c;政府谈数字化策略方针&#xff0c;企业谈数字化转型方案&#xff0c;员工谈数字化提效工具。互联网企业在谈&#xff0c;工业企业也在谈。 在这种大趋势下&#xff0c;作为一个从事TOB行业十年的老兵&#xff0c;今天就来给大家讲讲&#xff…

【C/C++基础实战】:用C++实现通讯录管理系统——含完整源码

文章目录 通讯录管理系统一、系统需求以及成品演示二、代码实现三、完整代码 通讯录管理系统 一、系统需求以及成品演示 1.1 系统需求 通讯录是一个可以记录亲人、好友信息的工具。这里利用C来实现一个通讯录管理系统 系统中需要实现的功能如下&#xff1a; 添加联系人&am…

申请的商标名称相同或近似,如何解决!

最近遇到一些首次申请注册商标的主体&#xff0c;基本想的名称都是两个字或或者两个字加通用词&#xff0c;还有用的行业描述词或缺乏显著特征词&#xff0c;这样去申请注册商标&#xff0c;普推知产老杨分析这样去直接申请注册大概率驳回。 两个字基本上注册的差不多了&#…

Ubuntu 20.04中用scrapy爬取博客园新闻首页的简单示例

一、梳理scrapy项目目录创建&#xff1a; 1、命令行终端定位到pycharm主目录&#xff1a;cd PycharmProjects 2、建立项目名称&#xff1a;scrapy startproject searchArticle 3、定位到项目目录下&#xff1a;cd searchArticle 4、设置爬虫名称与欲爬取的域名地址&#xf…

为什么c语言不对0和NULL做严格的区分?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;这个答案很简单:c语言不区分…

上海亚商投顾:沪指冲高回落 电力、电网产业链持续爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指、创业板指均跌超1%。电力、电网股再度爆发&#xff0c;众智科技、郴电国…

展望跨境智慧银行在全球化金融服务中的发展趋势和机遇

一、引言 随着全球经济的不断融合和金融科技的迅猛发展,跨境智慧银行作为连接不同国家和地区金融市场的桥梁,正逐渐展现出其独特的魅力和潜力。跨境支付与结算作为跨境智慧银行的核心业务之一,随着全球化的深入发展和国际贸易的日益频繁,其业务场景也愈发丰富和复杂。本文…

Xcode 15 libarclite 缺失问题

升级到Xcode 15运行项目报错&#xff0c;报错信息如下&#xff1a; SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a; try increasing the minimum d…

基于PHP+MySQL组合开发的720VR全景小程序源码系统 一键生成三维实景 前后端分离带网站的安装代码包以及搭建教程

系统概述 这款源码系统是专门为实现 720VR 全景展示而设计的。它结合了先进的技术和创新的理念&#xff0c;能够将真实场景以全景的形式呈现给用户&#xff0c;让用户仿佛身临其境。该系统采用 PHP 进行后端开发&#xff0c;MySQL 作为数据库管理系统&#xff0c;确保了系统的…

G60-M60F-ZQ手动抓取快速接头,专用于吊装设备的重物快速抓取

客户需求概述&#xff1a; 客户需要将重达将近400公斤的产品从一个工作台移动至另一个工作台&#xff0c;目前的方法是通过人工将吊环的螺纹与产品的螺纹相互拧紧&#xff0c;然后利用装备吊起移动&#xff0c;但这种方式效率低下&#xff0c;且因为工人的操作有时难以达到理想…

使用vanna实现Text2SQL

这节一起用vanna来实现自然语言转SQL&#xff0c;之前的大模型一直停留在问答阶段&#xff0c;答案基本都是大模型提供的&#xff0c;至多是加点本地知识库&#xff0c;tet&#xff0c;pdf等文档&#xff0c;丰富大模型的内容&#xff0c;但是想要大模型与一些管理系统对接还是…

XDebug配置极简教程,phpstorm实现http请求断点调试

写这篇的文章的初衷:网络上配置XDebug的文章有很多,XDebug也有官方的文档, PhpStorm也有官方的文档,为什么还要写那? 相信不少人,都有一种感觉,虽然教程很多,但是按教程走一遍,自己的确不能正常调试。 问题出在下面几个方面: 1. 对调试过程中,没有一定的认识,因此…

使用ETL读取文件数据并快速写入mysql中

本文介绍使用国产的ETL工具ETLCloud平台来读取文件文件中的数据到mysql数据库中&#xff0c;首先需要安装ETLCloud的社区版本&#xff0c;然后在示例应用中创建一个文件读取流程如下&#xff1a; 点击“流程设计”后打开流程图如下 打开文本文件读取节点配置要读取的文件目录和…

刷代码随想录有感(82):贪心算法——摆动序列

题干&#xff1a; 代码&#xff1a; class Solution { public:int wiggleMaxLength(vector<int>& nums) {if(nums.size() < 1)return nums.size();int prediff 0;int curdiff 0;int res 1;for(int i 0; i < nums.size() - 1; i){curdiff nums[i 1] - nu…

【美羊羊拿金币问题】

问题&#xff1a; 有一天美羊羊正在草地上玩耍&#xff0c;突然天上开始落金币&#xff0c;这些金币掉落的范围在一个固定的水平区域内&#xff0c;但这些金币一旦掉落到地上就消失了&#xff0c;因此美羊羊只有不断地移动并从空中接住这些金币才能得到它们。假设金币掉落的位…

【OCPP】ocpp1.6协议第3.13章节SmartCharging介绍及翻译

目录 3.13 SmartCharging智能充电-概述 智能充电的目标 关键功能 消息类型 负载管理 动态电量配置 总结 3.13 SmartCharging智能充电-译文 3.13.1 Charging Profile Purpose充电配置的目的 3.13.2 Stacking charging profile堆叠充电配置 3.13.3 Combining charging profile pu…

OrangePi AIpro开发板,使用了310B,昇腾310B较于昇腾310有何性能提升?

OrangePi AIpro开发板 他们对应的模组分别是&#xff1a;Atlas 200 AI和Atlas 200I A2 310&#xff1a;基本规格 - Atlas 200 AI加速模块 用户指南 14 - 华为 (huawei.com) 310B&#xff1a;基本规格 - Atlas 200I A2 加速模块 用户指南 04 - 华为 (huawei.com)

java面试(多线程)

线程和进程的区别 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘&#xff0c;网络等设备。进程就是用来加载指令&#xff0c;管理内存&#xff0c;管…