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;
}
};
查看16道真题和解析
