当前位置: 首页 > news >正文

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++的编程风格

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

感谢大家的三连支持!

http://www.jsqmd.com/news/141085/

相关文章:

  • Dify平台的情感倾向分析精度评估
  • Ubuntu下Qt进程重启失败全解析
  • 10、PHP项目的测试、部署与持续集成实践
  • Dify如何支持多Agent协作机制?
  • 11、PHP开发中的调试、部署与标准库应用
  • Dify平台的热更新机制避免服务中断
  • Dify如何实现对话策略的动态调整?
  • 正弦波生成新思路:DDS技术波形发生器设计详解
  • 12、PHP SPL 迭代器与对象标识全解析
  • Dify平台的开发者激励计划展望
  • 17、构建学生成绩报告系统:从 Rails 应用到 Access 数据导入
  • 18、利用Ruby与Google AdWords进行数据处理和广告优化
  • 13、PHP SPL迭代器与文件目录处理全解析
  • 【教学类-100-01】20251225交通工具《主题:小司机》确保透明背景
  • 19、构建谷歌 AdWords 广告活动报告应用
  • 14、PHP SPL 功能在文件操作与数组重载中的应用
  • Dify平台的多模态输入支持进展通报
  • 支付系统测试全解析:资金流、事务与对账的工程化实践
  • Dify在旅游路线智能推荐中的应用探索
  • 电源完整性基础:去耦电容在电路初期的深度剖析
  • Keil安装后C51编译器缺失解决方法详解
  • Dify平台的会话上下文保持技术实现揭秘
  • Dify平台的搜索引擎优化(SEO)能力分析
  • 通俗解释AUTOSAR通信服务的基本原理
  • Dify开源协议解读:商业使用是否受限?
  • C#文件与数据操作核心概念手册
  • 7、PHP 反射 API 与 DocBook 文档编写指南
  • 视源股份冲刺港股:前9个月营收181亿,净利8.7亿同比降7%
  • 2024年传智杯全国IT技能大赛-程序设计赛道省赛第一场
  • HBuilderX运行不了浏览器问题解析:前端调试常见故障深度剖析