剑指 Offer 06. 从尾到头打印链表
>输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
链表信息:
```cpp
/**
?* Definition for singly-linked list.
?* struct ListNode {
?* ? ? int val;
?* ? ? ListNode *next;
?* ? ? ListNode(int x) : val(x), next(NULL) {}
?* };
?*/
?```
思路:
? ? 将链表的值从尾到头反过来,链表只有下一个节点的指针,所以得从头遍历取出每个值;
1. 创建vector,从头到尾遍历链表,将值放入,调用std::reverse,头尾互换;
```cpp
class Solution {
public:
? ? vector reversePrint(ListNode* head) {
? ? ? ? vector v;
? ? ? ? ListNode* _head=head;
? ? ? ? while(_head){
? ? ? ? ? ? v.push_back(_head->val);
? ? ? ? ? ? _head=_head->next;
? ? ? ? }
? ? ? ? ?reverse(v.begin(),v.end());
? ? ? ? return v;
? ? }
};
```
2.开始和第一种方法相同,后面在创建一个vector,用反向迭代器赋值;
```cpp
class Solution {
public:
? ? vector reversePrint(ListNode* head) {
? ? ? ?vector v;
? ? ? ? if(head==NULL)
? ? ? ? return v;
? ? ? ? ListNode* _end=head;
? ? ? ? while(_end->next!=NULL){
? ? ? ? ? ? v.push_back(_end->val);
? ? ? ? ? ? _end=_end->next;
? ? ? ? }
? ? ? ? v.push_back(_end->val);
? ? ? ? vector v_reverse(v.rbegin(),v.rend());
? ? ? ? return v_reverse;
? ? ? ?}
};
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210609205456910.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjI3MDIyMw==,size_16,color_FFFFFF,t_70)