从尾到头打印链表
题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路一:反转链表,但是也改变了原链表的结构
vector<int> printListFromTailToHead(ListNode* head) {
vector<int>result;
if (head == nullptr)return result;
ListNode*ptr = head;
ListNode*left = nullptr;
ListNode*right = nullptr;
while (ptr != nullptr){
right = ptr->next;
ptr->next = left;
left = ptr;
ptr = right;
}
while (left != nullptr){
result.push_back(left->val);
left = left->next;
}
return result;
}
思路二:采用递归的方法
void printListCore(vector<int>&result, ListNode*head){
if (head == nullptr)return;
printListCore(result, head->next);
result.push_back(head->val);
}
vector<int> printListFromTailToHead(ListNode* head){
vector<int>result;
printListCore(result, head);
return result;
}