news 2026/5/8 0:47:22

12.25 - 重排链表 NULL与nullptr的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
12.25 - 重排链表 NULL与nullptr的区别

目录

1.重排链表

a.核心思想

b.思路

c.步骤

2.NULL与nullptr的区别


1.重排链表

143. 重排链表 - 力扣(LeetCode)https://leetcode.cn/problems/reorder-list/

/** * 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* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* curr = head; while (curr != nullptr) { ListNode* nextTemp = curr->next; curr->next = prev; prev = curr; curr = nextTemp; } return prev; } void reorderList(ListNode* head) { // 处理特殊情况 if (head == nullptr || head->next == nullptr) return; // 找到链表的中点 ListNode* slow = head; ListNode* fast = head; while (fast->next != nullptr && fast->next->next != nullptr) { slow = slow->next; fast = fast->next->next; } // 反转后半部分链表 ListNode* secondHead = reverseList(slow->next); slow->next = nullptr; // 合并两个链表 ListNode* p1 = head; ListNode* p2 = secondHead; while (p2 != nullptr) { ListNode* temp1 = p1->next; ListNode* temp2 = p2->next; p1->next = p2; p2->next = temp1; p1 = temp1; p2 = temp2; } } };

a.核心思想

通过找到链表的中点,将链表分为前后两部分,对后半部分进行反转,然后合并前后两部分,在合并过程中将后半部分的节点逐个插入到前半部分的相邻节点之间,从而实现重排链表的目的。

b.思路

① 找到链表的中点:使用快慢指针法,快指针每次走两步,慢指针每次走一步,当快指针到达链表末尾时,慢指针指向的就是链表的中点。

② 反转后半部分链表:从慢指针的下一个节点开始,反转后半部分链表。

③ 合并链表:将前半部分链表和反转后的后半部分链表进行合并,将后半部分的节点逐个插入到前半部分的相邻节点之间。

c.步骤

① 使用快慢指针找到链表的中点。

② 反转后半部分链表。

③ 合并两个链表。

2.NULL与nullptr的区别

NULL

nullptr

类型与本质

传统上是一个宏定义,通常被定义为0或者(void*)0。在整数上下文中,它就是整数0;在指针上下文中,代表空指针。这可能导致类型推导上的模糊性

是C++11引入的关键字,其类型为std::nullptr_t,是一种明确的空指针类型,能清晰地表示指针值为空

类型安全

由于可能被定义为整数0,在函数重载等场景下,编译器可能将其误判为整数参数,而非指针参数,引发潜在的类型错误

具有明确的指针类型,在函数重载时,编译器能准确识别其为指针,增强了代码的类型安全性

可读性与现代性

C语言遗留的表示方式,在C++代码中使用略显陈旧

是C++11标准的一部分,使代码意图更清晰,更符合现代C++的编程风格

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 2:48:22

C#文件与数据操作核心概念手册

AI总结课上知识生成📌 一、JSON序列化(数据交换核心)概念本质JSON 对象翻译器 把内存中的对象变成文本(序列化),把文本变回对象(反序列化)。就像把3D模型拍照(变平面&am…

作者头像 李华
网站建设 2026/5/2 16:09:32

2、初探 Silverlight 开发:从创建到部署

初探 Silverlight 开发:从创建到部署 1. 开发工具选择 在开发 Silverlight 应用时,有两种常用的工具可供选择。对于专业开发者而言,Visual Studio 2008 是首选,它具备完善的编码、测试和调试工具。而对于图形设计师,Microsoft Expression Blend 2.5 则更适合,它能设计出…

作者头像 李华
网站建设 2026/5/1 2:50:02

Dify如何实现动态知识更新?

Dify如何实现动态知识更新? 在企业纷纷拥抱AI的今天,一个现实问题日益凸显:大语言模型虽然强大,但它的“大脑”是静态的。当市场政策一天一变、产品文档频繁迭代时,依赖训练数据闭门造车的LLM很容易给出过时甚至错误的…

作者头像 李华
网站建设 2026/5/1 2:47:03

无需Docker!RustFS Windows原生版炸场发布,1分钟解锁高性能对象存储

作为开发者,你是否也曾被这些问题逼到崩溃?想在本地搭个对象存储服务测试代码,结果Docker镜像拉取龟速,网络稍差就超时失败;配置环境绕来绕去,折腾半小时还没进入正题,宝贵的开发时间全浪费在等…

作者头像 李华
网站建设 2026/5/5 8:35:14

2026年,45岁工程主管的深夜自白:我的经验,还够用吗?

昨晚和老刘喝酒,他一句话让我心里咯噔一下。他在一家汽车零部件厂干了二十年,从技术员做到生产部长,今年47岁。厂里最近搞智能化升级,成立了个“数字化推进办公室”。他本以为负责人非他莫属,结果公司外聘了个35岁的博…

作者头像 李华
网站建设 2026/5/8 1:40:18

Dify与Kubernetes集群协同部署的技术要点

Dify与Kubernetes集群协同部署的技术要点 在AI应用快速落地的今天,企业面临的不再是“要不要用大模型”,而是“如何高效、稳定地构建和运维基于LLM的应用”。传统开发模式中,从搭建前端界面到对接后端模型、配置向量数据库、实现权限控制&…

作者头像 李华