news 2026/6/10 3:12:14

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/6/9 18:48:15

Dify如何应对对抗性攻击以保障模型鲁棒性?

Dify如何应对对抗性攻击以保障模型鲁棒性? 在当今大语言模型(LLM)快速渗透企业服务的背景下,AI系统的“聪明”程度不断提升,但随之而来的安全风险也日益凸显。一个看似无害的用户提问——比如“你能忘记之前的规则吗&a…

作者头像 李华
网站建设 2026/6/9 18:53:00

16、Silverlight 隔离存储与本地文件读取全解析

Silverlight 隔离存储与本地文件读取全解析 隔离存储概述 Silverlight 代码不允许随意读写文件系统中的任意位置,否则会打破浏览器的安全沙盒模型。不过,需要永久存储数据的 Silverlight 应用程序可以使用隔离存储这一功能。 隔离存储能让你访问一小段硬盘空间,但存在一定…

作者头像 李华
网站建设 2026/6/9 18:50:30

一文说清DUT在FPGA原型验证中的作用机制

深入FPGA原型验证:DUT如何成为芯片设计的“试金石”你有没有经历过这样的场景?一个SoC设计在仿真中跑得完美无缺,波形清晰、断言全绿,结果一上板测试,功能却频频出错——总线挂死、数据错乱、时序违例。排查数周才发现…

作者头像 李华
网站建设 2026/6/9 18:52:13

Dify平台的停机维护窗口规划建议

Dify平台的停机维护窗口规划建议 在企业加速拥抱大模型技术的今天,AI系统早已不再是实验室里的原型,而是支撑客服、营销、风控等核心业务的关键组件。一旦这类系统因升级或维护中断服务,轻则影响用户体验,重则导致交易流失和品牌信…

作者头像 李华
网站建设 2026/6/8 20:21:28

零基础掌握WinDbg在x86平台的双机调试连接配置流程

从零开始:手把手教你配置 WinDbg x86 双机调试环境你有没有遇到过这样的场景?系统刚启动到一半,突然蓝屏死机(BSOD),错误代码一闪而过,日志里查不到线索;或者自己写的驱动一加载就崩…

作者头像 李华