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

剑指offer——链表:从尾到头打印链表

1、新写一个函数,递归调用这个函数

1、数组如果作为函数参数,需要取地址——如果不取地址,返回的数组为空

2、为什么结束条件是node为空,不是node的下一个为空

        如果node的下一个为空返回,就会略过node为尾的节点,直接递归回来了,把倒数第二个元素的值压入数组了

3、函数内的顺序为什么是先判断,再回调,再存值啊?

        先判断,先确定回调的边界,防止调用过多

        先回调,再存值,是因为先回调,保证先拿到节点,再存值,做成拿节点,存值,再拿前一个节点,再存值,保证是逆序的拿到节点

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {ListNode* node=head;vector<int> ans;func(node,ans);return ans;}void func(ListNode* node,vector<int> &ans){if(node==nullptr)return;func(node->next,ans);ans.push_back(node->val);}
};

2、原地反转链表

是把pre和pre的next,也就是curr之间的指向反转嘛,然后再把curr变成next

翻转链表流程:先存要被断开的,后半段已经存储了,可以直接改变当前元素的指向了,指向前一个元素,把当前元素的值赋值给前一个(前一个元素右移一位),可以处理下一个节点了,下一个节点就是刚才存储过的那个元素,叫next,把它的值赋值给当前元素的值

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {ListNode* pre=nullptr;ListNode* curr=head;ListNode* next=nullptr;while (curr!=nullptr) {//先存next=curr->next;//反转curr->next=pre;//移动pre=curr;//把存储的后半段的链表的头 赋值给当前的节点curr=next;}//把前一个元素赋值给当前元素curr=pre;vector<int> ans;while(curr!=nullptr){ans.push_back(curr->val);curr=curr->next;}return ans;}
};
http://www.dtcms.com/a/273552.html

相关文章:

  • 自用docker记录
  • 学习C++、QT---21(QT中QFile库的QFile读取文件、写入文件的讲解)
  • 部署 React + Vite + TypeScript 项目到阿里云 ECS
  • ARMv9架构
  • tcp/quic 的滑动窗口
  • 飞算 JavaAI 体验:重塑 Java 开发的智能新范式
  • Element Plus和Ant Design Vue深度对比分析与选型指南
  • WD0407 40V 7A 超级肖特基二极管,应用于开关汽车工业控制
  • 【字节跳动】数据挖掘面试题0015:100 亿个单词,找出出现频率最高的单词。要求几种方案
  • 20250711荣品RD-RK3588开发板在Android13下的开机自启动的配置步骤
  • React之旅-05 List Key
  • 进制转换原理与实现详解
  • cyvcf2 知识点详解
  • MYSQL C_API使用全解
  • 基于gitlab 构建CICD发布到K8S 平台
  • Java大厂面试实录:谢飞机的电商场景技术问答(Spring Cloud、MyBatis、Redis、Kafka、AI等)
  • 飞算Java AI:专为 Java 开发者打造的智能开发引擎
  • 后台管理系统-权限管理
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(下)
  • 从Markdown到PPT:用Python打造专业演示文稿转换器
  • 2025前端面试真题以及答案-不断整理中,问题来源于牛客真题
  • 面具贴纸美颜SDK如何集成进直播APP?技术细节与性能优化实战
  • 百度2026届校招开启,大规模发力AI的百度未来何在?
  • PPT处理控件Aspose.Slides教程:使用 C# 将 PPTX 转换为 EMF
  • 【Linux仓库】命令行参数与环境变量【进程·伍】
  • 语音对话秒译 + 视频悬浮字 + 相机即拍即译:ViiTor 如何破局跨语言场景?
  • Django快速入门搭建网站
  • Monorepo 与包管理工具:从幽灵依赖看 npm 与 pnpm 的架构差异
  • Django母婴商城项目实践(二)
  • 行测之地理常识