题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
链表中当前节点q的next指针本来指向的是后一个节点,现在要令他指向前一个节点p(在此之前用r存下q的后一个节点)。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> res;
if(head==NULL)
return res;
if(head->next==NULL)
{
res.push_back(head->val);
return res;
}
ListNode* p=head;
ListNode* q=head->next;
ListNode* r;
head->next=NULL; //原来的头指针反转后成为尾指针,应当指向NULL
while(q)
{
r=q->next; //r储存当前节点现在的next,也就是r指向q的下一个节点
q->next=p; //当前q节点的next指向前一个节点p。
p=q; //节点后移一个
q=r;
}
head=p;
while(p)
{
res.push_back(p->val);
p=p->next;
}
return res;
}
};