03、从尾到头打印链表

题目描述:

  输入一个链表的头结点,从尾到头反过来打印每个结点的值。

解题思路:

  • 改变链表结构的话,先反转链表,然后从头到尾打印每个结点的值。(后续博文会有相关实现,这里就暂不实现)。

  • 无需改变链表结构,由于链表是从头到尾遍历的,现在需要从尾到头打印,是一个典型的先进后出模式。所以可以使用栈,遍历整个链表,将结点依次入栈,然后再依次出栈,实现“先进后出”。

  • 无需改变链表结构,递归实现,如果链表结点数过多的话,可能会导致栈溢出。

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;
}

参考:http://www.cnblogs.com/AndyJee/p/4624417.html

猜你喜欢

转载自blog.csdn.net/daaikuaichuan/article/details/83959970