输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035
示例1
输入
{67,0,24,58}
输出
[58,24,0,67]
方法一:
准备一个prev节点指向空,表示要翻转节点的前一个节点;
cur表示当前要反转的节点,初始化head,为头结点;
再准备一个tmp,用来保存还未反转的第一个节点;
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution
{
public:
vector<int> printListFromTailToHead(ListNode* head)
{
ListNode *prev=nullptr;
ListNode *cur=head;
ListNode *tmp=cur;
while(cur)
{
tmp=cur->next;//tmp用来保存该节点,
cur->next=prev;
prev=cur;//prev和cur分别向后移
cur=tmp;
}
vector<int>ret;
while(prev)
{
ret.push_back(prev->val);
prev=prev->next;
}
return ret ;
}
};
方法二:
reserve函数进行翻转;
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution
{
public:
vector<int> printListFromTailToHead(ListNode* head)
{
vector<int>ret;
while(head)
{
ret.push_back(head->val);
head=head->next;
}
reverse(ret.begin(),ret.end());
return ret;
}
};