铁道部售票网站多少钱建设,有网站源码怎么搭建网站,wordpress排名主题,有网页设计这个专业吗方法一 建立一个数组#xff0c;从头到尾遍历一遍链表#xff0c;然后将链表的每个元素的值赋给数组 犯了一个错误 新建的vector容器是一个可变长的数组#xff0c;要想像数组下标那样访问前提是这个下标所指向的元素得存在#xff0c;这也就跟那个声明一维数组得写出长度来…方法一 建立一个数组从头到尾遍历一遍链表然后将链表的每个元素的值赋给数组 犯了一个错误 新建的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:vectorint printListReversingly(ListNode* head) {vectorint num;int i0;ListNode * phead;while(p!NULL){num.push_back(p-val);pp-next;}reverse(num.begin(),num.end());//逆置数组.容器自带的return num;}
};也可以用反向迭代器 rbegin()是一个函数用于返回一个逆序迭代器指向容器的最后一个元素 可以用它来进行反向遍历。例如rbegin()和rend()可以用于对容器中的元素进行反向遍历例如
vectorint 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 vectorint(res.rbegin(), res.rend());方法二 递归
这段代码是用递归实现单链表的倒序输出每次递归调用将 head-next 传入递归函数直到链表末尾返回一个空的 vector。然后每次回溯时将当前节点的值 head-val 加入到 vector 中。
整个过程就是一个递归调用的过程因此每次函数调用都会在内存栈中分配一段空间。调用栈的排列顺序遵循先进后出的原则即最后调用的函数最先返回因此先访问链表末尾的节点。
class Solution {
public:vectorint printListReversingly(ListNode* head) {if(!head)return ;auto resprintListReversingly(head-next);res.push_back(head-val);return res;}
};到这递归又犯晕了一会儿举一个例子注意看箭头的指示 也可以自己声明个栈
class Solution {
public:vectorint printListReversingly(ListNode* head) {stackints;vectorintres;while(head){s.push(head-val);headhead-next;}//也可以直接声明栈大小的数组//vectorint(s.size());while(!s.empty()){//正好练了容器栈的应用res.push_back(s.top());s.pop();}return res;}
};