JZ3 从尾到头打印链表
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
方法1
思路
这里要返回的是一个数组,所以可以直接先把链表里的元素取出来放进一个数组,然后再把这个数组进行逆转(不能用reverse)
可以定义一个i=0,一个j=size-1;然后头尾进行交换,直到i=j或者i>j
代码
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> v; ListNode* p; p=head; while(p!=NULL) { v.push_back(p->val); p=p->next; } int temp=0; for(int i=0,j=v.size()-1;i<j;i++,j--) { temp=v[i]; v[i]=v[j]; v[j]=temp; } return v; } };
方法2
思路
采用栈的思想(后进先出)
遍历整个链表,把值放入栈中,然后依次打印栈,但是这里返回的是一个数组,所以还比较麻烦,要先把栈依次弹出存入数组中再返回
代码
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { stack<int> s; ListNode* p=head; while(p!=NULL) { s.push(p->val); p=p->next; } vector<int> res; while(!s.empty()) { res.push_back(s.top()); s.pop(); } return res; } };