news 2026/3/16 0:04:52

1.17 - 排序链表 虚函数指针是什么时候初始化的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.17 - 排序链表 虚函数指针是什么时候初始化的

目录

1.排序链表

a.核心思想

b.思路

c.步骤

2.虚函数指针是什么时候初始化的


1.排序链表

148. 排序链表 - 力扣(LeetCode)https://leetcode.cn/problems/sort-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* sortList(ListNode* head) { if (head == nullptr || head->next == nullptr) return head; // 找到中点 ListNode* slow = head; ListNode* fast = head->next; while (fast != nullptr && fast->next != nullptr) { slow = slow->next; fast = fast->next->next; } ListNode* mid = slow->next; slow->next = nullptr; // 递归排序左右子链表 ListNode* left = sortList(head); ListNode* right = sortList(mid); // 合并两个有序链表 return merge(left, right); } ListNode* merge(ListNode* l1, ListNode* l2) { ListNode dummy(0); ListNode* tail = &dummy; while (l1 != nullptr && l2 != nullptr) { if (l1->val < l2->val) { tail->next = l1; l1 = l1->next; } else { tail->next = l2; l2 = l2->next; } tail = tail->next; } tail->next = (l1 != nullptr) ? l1 : l2; return dummy.next; } };

a.核心思想

利用归并排序的思想对链表进行排序,归并排序适合链表的排序,因为其合并过程只需要改变节点的指针指向,而不需要像数组那样进行大量的数据移动。

b.思路

① 分解:找到链表的中点,将链表分成两个子链表。

递归排序:对两个子链表分别进行递归排序。

③ 合并:将两个排好序的子链表合并成一个有序的链表。

c.步骤

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

递归终止条件:当链表为空或只有一个节点时,直接返回该链表。

③ 合并链表创建一个虚拟头节点,然后比较两个子链表的节点值,将较小的节点连接到新链表上,直到其中一个子链表为空,然后将另一个子链表直接连接到新链表末尾。

2.虚函数指针是什么时候初始化的

① 基类构造阶段:调用基类构造函数时,vptr指向基类的虚函数表(vtable)。

② 派生类构造阶段:调用派生类构造函数时,vptr被更新为指向派生类的vtable。

③ 析构阶段:析构时逆向更新,先析构派生类(vptr指向派生类vtable),再析构基类(vptr指向基类vtable)。

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

感谢大家的三连支持!

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

【剑斩OFFER】算法的暴力美学——力扣 692 题:前 K 个高频单词

一、题目描述 二、算法原理 思路&#xff1a;建立 k 个节点的小根堆 原因&#xff1a;通过不断的入让数据入堆&#xff0c;导致大的数据沉底&#xff0c;如果节点大于 k 个&#xff0c;把堆顶的数据出堆&#xff0c;此时出的就是小的值&#xff0c;不断出&#xff0c;不断的入…

作者头像 李华
网站建设 2026/3/13 4:53:59

AI量化投资系统深度解析:多智能体协作如何重塑金融决策范式

AI量化投资系统深度解析&#xff1a;多智能体协作如何重塑金融决策范式 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 在金融科技快速发展的今天…

作者头像 李华
网站建设 2026/3/9 7:57:25

OpenCode智能编程助手:VS Code扩展终极指南

OpenCode智能编程助手&#xff1a;VS Code扩展终极指南 【免费下载链接】opencode 一个专为终端打造的开源AI编程助手&#xff0c;模型灵活可选&#xff0c;可远程驱动。 项目地址: https://gitcode.com/GitHub_Trending/openc/opencode OpenCode是一款专为现代开发者设…

作者头像 李华
网站建设 2026/3/4 21:10:55

WinDbg Preview下载常用命令清单:入门必看整理

从零开始掌握 WinDbg Preview&#xff1a;新手必会的调试命令实战指南 你是不是也曾在系统崩溃后面对一个 .dmp 文件束手无策&#xff1f; 或者在开发驱动时遇到蓝屏&#xff08;BSOD&#xff09;&#xff0c;却不知道从何查起&#xff1f; 别担心&#xff0c; WinDbg Pre…

作者头像 李华
网站建设 2026/3/16 2:33:42

边缘计算翻译:HY-MT1.5-1.8B嵌入式部署指南

边缘计算翻译&#xff1a;HY-MT1.5-1.8B嵌入式部署指南 1. 引言 随着多语言交流需求的快速增长&#xff0c;实时、低延迟的翻译服务在智能设备、移动应用和边缘计算场景中变得愈发重要。传统云端翻译方案虽然性能强大&#xff0c;但受限于网络延迟和数据隐私问题&#xff0c;…

作者头像 李华
网站建设 2026/3/4 13:10:30

YOLO26训练避坑指南:镜像部署常见问题全解析

YOLO26训练避坑指南&#xff1a;镜像部署常见问题全解析 在深度学习目标检测领域&#xff0c;YOLO系列模型凭借其高效、准确和易用的特性&#xff0c;已成为工业界与学术界的首选方案之一。然而&#xff0c;在实际项目落地过程中&#xff0c;开发者常常面临环境配置复杂、依赖…

作者头像 李华