剑指offer—从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
博客中代码均在牛客C++11(clang++ 3.9)中通过
通常情况下,打印是一个只读操作,一般不希望修改原链表的结构,基于这种考虑,就不能直接反转链表来实现了。那么就要通过遍历链表到最后一个节点来打印了。
- 首先我们定义一个数组用来存储从尾到头顺序的链表值
- 接着可以利用递归的方法,先遍历链表到最后一个节点,再递归向数组中尾插对应节点的链表值
- 最后返回该数组即可
代码如下:
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
// 定义数组ret按从尾到头顺序存储链表值
vector<int> ret;
if(nullptr != head)// 当前结点不为空时向后遍历或插入链表值
{
if(nullptr != head->next)// 如果下个节点不为空,则向后遍历
ret = printListFromTailToHead(head->next);
ret.push_back(head->val);// 移动到最后一个节点后,插入最后节点的值,接着每次递归返回后都插入对应节点的链表值
}
return ret;
}
};