当前位置: 首页 > 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.gsyq.cn/news/155241.html

相关文章:

  • Dify如何支持多Agent协作机制?
  • 正弦波生成新思路:DDS技术波形发生器设计详解
  • 17、构建学生成绩报告系统:从 Rails 应用到 Access 数据导入
  • 【教学类-100-01】20251225交通工具《主题:小司机》确保透明背景
  • 14、PHP SPL 功能在文件操作与数组重载中的应用
  • Dify在旅游路线智能推荐中的应用探索
  • Dify平台的会话上下文保持技术实现揭秘
  • 2024年传智杯全国IT技能大赛-程序设计赛道省赛第一场
  • 系统学习UDS 28服务与ISO 14229标准对接
  • 13、探索Silverlight与HTML的深度融合:实现丰富的浏览器集成体验
  • Dify在电影剧本创意生成中的艺术表现力测试
  • 9、PHP开发中的反射API、版本控制与单元测试
  • 《吃透 C++ vector:从基础使用到核心接口实战指南》
  • 一文说清DUT在FPGA原型验证中的作用机制
  • 16、Silverlight 隔离存储与本地文件读取全解析
  • Dify平台的地理位置语义理解能力测试
  • 3、Puppet安装与配置全指南
  • Zephyr系统睡眠模式详解:节能策略完整指南
  • GISer必看系列⑧|地信各个技术方向的职业发展路线
  • Elasticsearch下载Windows系统适配核心要点解析
  • Dify在自动驾驶语义理解模块中的潜在应用
  • Dify平台的停机维护窗口规划建议
  • 3、软件设计模式与架构解析
  • 手把手教你Elasticsearch安装与集群搭建全过程
  • 计算世界之安生:C++继承的文水和智慧
  • 5、软件开发方法与流程全解析
  • USB转串口在智能仪表数据采集中的实际应用
  • 安装Flume
  • 项目应用:基于Altium Designer的蓝牙模块PCB布局实例
  • 通俗解释Elasticsearch数据如何在Kibana中展示