• 从尾到头打印链表


    • 题目描述:

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

    /**
    *  struct ListNode {
    *        int val;
    *        struct ListNode *next;
    *        ListNode(int x) :
    *              val(x), next(NULL) {
    *        }
    *  };
    */
    
    • 分析:

    反向打印链表,有两种思路:

    1.    既然是要打印,肯定要遍历链表。而打印一般理解为只读操作,并不对链表进行修改,也不改变链表结构。但是链表的遍历我们都知道只能是是从头到尾的,但是输出去要求从尾到头,也就是说第一个遍历到的最后输出,而最后一个遍历到的第一个输出。这个思想复合典型的 “后进先出”,也就是说我们可以借用一个栈来实现这种反向打印的操作。
    class Solution {
    public:
        vector<int> printListFromTailToHead(ListNode* head) {
            stack<ListNode*> NodeStack;
            
            ListNode* pHead = head;
            while(pHead != NULL){
                NodeStack.push(pHead);
                pHead = pHead->next;
            }
            
            vector<int> vals;
            while(!NodeStack.empty()){
                vals.push_back(NodeStack.top()->val);
                NodeStack.pop();
            }
            return vals;
        }
    };
    
    1. 不考虑不改变列表结构这一条件,要反向输出,只要把链表整个反转过来再输出就好了。即把头结点变成尾节点,而尾变成头。这种方法在反转链表中再进行总结。
  • 相关阅读:
    api封装
    计算字符串内的字出现几次
    Generator 函数的语法
    js原型链的看法
    购物车之上线版思路
    Java并发多线程面试题 Top 50
    Java NIO和IO的区别
    【转载】线程池的原理及实现
    【转载】关于SimpleDateFormat安全的时间格式化线程安全问题
    【转载】Java对象的生命周期
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6756450.html
Copyright © 2020-2023  润新知