输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
1.用栈
vector<int> reversePrint(ListNode* head) {
//用栈,怎么定义一个栈stack p
stack<int> p;
vector<int> result;
ListNode* dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode* cur = head;
//遍历链表
while(cur != nullptr ){
p.push(cur->val);
cur = cur->next;
}
while(!p.empty()){
result.push_back(p.top());
p.pop();
}
return result;
}
时间复杂度O(n):正向反向遍历各一次
空间复杂度O(n):额外使用一个栈存储节点
2.使用递归
//终止条件
if(head==NULL){
return result; //返回值是什么?
}
//逻辑
reversePrint(head->next);
result.push_back(head->val);
return result;
有点瑕疵未排除,head->为空呢?