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

acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器

在这里插入图片描述方法一
建立一个数组,从头到尾遍历一遍链表,然后将链表的每个元素的值赋给数组
犯了一个错误
新建的vector容器是一个可变长的数组,要想像数组下标那样访问前提是这个下标所指向的元素得存在,这也就跟那个声明一维数组得写出长度来一回事。
我就犯了访问越界 的问题,所以如果这个元素不存在,那就得用push_back()方法来添加一个新元素到容器末尾

所以要注意vector 可变长数组的问题。

在这里插入图片描述

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:vector<int> printListReversingly(ListNode* head) {vector<int> num;int i=0;ListNode * p=head;while(p!=NULL){num.push_back(p->val);p=p->next;}reverse(num.begin(),num.end());//逆置数组.容器自带的return num;}
};

也可以用反向迭代器
rbegin()是一个函数,用于返回一个逆序迭代器,指向容器的最后一个元素
可以用它来进行反向遍历。例如,rbegin()和rend()可以用于对容器中的元素进行反向遍历,例如:

vector<int> v = {1, 2, 3, 4, 5};
for(auto it = v.rbegin(); it != v.rend(); ++it) {cout << *it << " "; // 输出 5 4 3 2 1
}

在此示例中,rbegin()返回一个逆序迭代器,它指向5这个元素,然后通过递增迭代器,依次访问4、3、2、1等元素。

或者用这句来直接返回逆置数组

 return vector<int>(res.rbegin(), res.rend());

方法二 递归:

这段代码是用递归实现单链表的倒序输出,每次递归调用将 head->next 传入递归函数,直到链表末尾,返回一个空的 vector。然后每次回溯时将当前节点的值 head->val 加入到 vector 中。

整个过程就是一个递归调用的过程,因此每次函数调用都会在内存栈中分配一段空间。调用栈的排列顺序遵循先进后出的原则,即最后调用的函数最先返回,因此先访问链表末尾的节点。

class Solution {
public:vector<int> printListReversingly(ListNode* head) {if(!head)return ;auto res=printListReversingly(head->next);res.push_back(head->val);return res;}
};

到这递归又犯晕了一会儿,举一个例子,注意看箭头的指示

在这里插入图片描述

也可以自己声明个栈

class Solution {
public:vector<int> printListReversingly(ListNode* head) {stack<int>s;vector<int>res;while(head){s.push(head->val);head=head->next;}//也可以直接声明栈大小的数组//vector<int>(s.size());while(!s.empty()){//正好练了容器栈的应用res.push_back(s.top());s.pop();}return res;}
};
http://www.lryc.cn/news/60943.html

相关文章:

  • Linux 性能优化大全!
  • 精通 TensorFlow 2.x 计算机视觉:第一部分
  • mulesoft MCIA 常用词汇、知识点汇总
  • Python 单样本学习实用指南:1~6 全
  • 心血管疾病数据探索分析
  • Pandas的应用-1
  • 【状态估计】电力系统状态估计的虚假数据注入攻击建模与对策(Matlab代码实现)
  • 【Spring】Spring @Import注解的使用和源码分析
  • C++中的类与对象
  • 探索Qt图像处理的奥秘:从入门到精通
  • springboot+vue企业人事人力资源管理系统java公司员工出差考勤办公OA系统
  • 设计模式-模板模式在Java中的使用示例
  • 回溯算法及其应用
  • 如何一步步打造完美的成绩查询系统平台?
  • P1026 [NOIP2001 提高组] 统计单词个数
  • CTFHub | eval执行
  • IP协议头
  • 【xxl-job定时任务框架详解】
  • 7、在vscode上利用cmake构建多文件C++工程
  • Linux操作系统网络模块
  • 不同批次板子采集到的传感器压力值不同
  • 设计模式--原型模式
  • C++智能指针shared_ptr详解
  • 家政服务APP小程序开发功能详解
  • 【C++】deque的实现原理简单介绍
  • UWB隧道人员定位技术应用,施工作业安全精准保障
  • 15.2 矩阵链乘法
  • 向隐形冠军学习:聚焦人效,用时间管理提效益
  • Protocol Buffers Go Generated Code Guide
  • Python VTK STL 映射三维模型表面距离