1.主旨
- 这道题就是一个很基本的对于单向链表结构的考察,而单向链表的节点结构最基本的就是一个value值和一个next指针,只要清楚这一点,那么无论是从尾到头打印、存储,抑或是从头到尾打印、存储就都变成了简单操作的事情。
2.考点
- 考点1:单向链表的结构与基本节点格式;
- 考点2:对于栈结构与递归关系的理解,以及两者与循环的区别理解;
3.代码
3.1 栈结构存储
- 使用stack来从头到尾入栈,出栈时则是从尾到头出栈;
- 时间复杂度O(n),空间复杂度O(n),牛客网时间3ms,内存480K
vector<int> printListFromTailToHead1(ListNode* head)
{
ListNode* node = head;
stack<int> m_stack;
while (node != NULL)
{
m_stack.push(node->val);
node = node->next;
}
vector<int> temp;
while (!m_stack.empty())
{
temp.push_back(m_stack.top());
m_stack.pop();
}
return temp;
}
3.2 递归实现
- 递归嵌套就是栈结构的一种扩充,其优势在于无需使用stack来存储数据,但是对于本题是存储数据而不是打印数据(无论怎样都还是要用一个vector来存数据)来看,其效率也就没有那么大的优势了;
- 时间复杂度O(n),空间复杂度O(n)牛客网时间4ms,内存480K
vector<int> temp2;
vector<int> printListFromTailToHead(ListNode* head)
{
if (head != NULL)
{
printListFromTailToHead(head->next);
temp2.push_back(head->val);
}
return temp2;
}