题目描述:
输入一个链表的头结点,从尾到头反过来打印每个结点的值。
解题思路:
-
改变链表结构的话,先反转链表,然后从头到尾打印每个结点的值。(后续博文会有相关实现,这里就暂不实现)。
-
无需改变链表结构,由于链表是从头到尾遍历的,现在需要从尾到头打印,是一个典型的先进后出模式。所以可以使用栈,遍历整个链表,将结点依次入栈,然后再依次出栈,实现“先进后出”。
-
无需改变链表结构,递归实现,如果链表结点数过多的话,可能会导致栈溢出。
Demo:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
vector<int> printListFromTailToHead(ListNode* head)
{
stack<int> st;
ListNode* p = head;
while (p != NULL)
{
st.push(p->val); // 使用栈接收数据
p = p->next;
}
vector<int> vec;
while (!st.empty())
{
vec.push_back(st.top());
st.pop();
}
return vec;
}