牛客网-剑指offer-从头到尾打印链表
来源:互联网 发布:iphone 网络电视 编辑:程序博客网 时间:2024/06/07 14:35
题目:输入一个链表,从尾到头打印链表每个节点的值
输入 – 链表的表头
输出 – 要打印的“新链表”的表头
描述:对于这种顺序颠倒的问题,一般会想到栈,先进后出。
———-方法一 : 通过借助容器vector和栈stack共同完成
解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到得结点第一个输出。这就是典型的“后进先出”,可以用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个取出节点的值,放入vector容器中。
//链表结构体定义struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};class Solution {public: vector<int> printListFromTailToHead(struct ListNode* head) { vector<int> result;//存储输出的节点的值 stack<struct ListNode*> nodes;//用栈来存储每个节点 struct ListNode* pNode = head;//从链表头开始 while (pNode != NULL){ //链表的所有节点全部入栈 nodes.push(pNode); pNode = pNode->next; } while (!nodes.empty()){ //出栈:后进先出 pNode = nodes.top(); result.push_back(pNode->val); nodes.pop(); } return result; }};
———-方法二:不使用容器vector,直接用print结合递归方式实现链表的反向打印
递归在本质上就是一个栈结构,于是很自然地想到用递归来实现 要实现反过来输出链表每访问到一个结点的时候, 先递归输出它后面的结点,再输出该结点自身,这样链表的输出结构就反过来了。
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};void printListFromTailToHead(ListNode* pListHead){ if(pListHead!=NULL){ //print the next node first if(pListHead->next!=NULL){ printListFromTailToHead(pListHead->next); } // And then print the current node print("%d",pListHead->val); }}
———-方法三:不使用栈结构stack,直接利用翻转函数reverse()函数和容器vector
每访问到一个结点的时候,取出节点的值放入容器中,最后使用翻转函数reverse()将容器翻转。
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};class Solution{public: vector<int> printListFromTailToHead(struct ListNode* head){ vector<int> result; struct ListNode* pNode=head; while(pNode!=NULL){ result.push_back(pNode->val); pNode=pNode->next; } reverse(result.begin(),result.end());//applying reverse() return result; }};
阅读全文
0 0
- 牛客网-剑指offer-从头到尾打印链表
- [剑指offer]从头到尾打印链表
- 剑指offer-5:从头到尾打印链表
- 剑指Offer-从头到尾打印链表
- 剑指offer—从头到尾打印链表
- 剑指Offer---从头到尾打印链表
- 剑指offer 从头到尾打印链表
- 剑指offer-从头到尾打印链表
- 剑指offer从头到尾打印链表
- [牛客网,剑指offer,python] 从头到尾打印链表
- 《剑指Offer》面试题-从头到尾打印链表
- 《剑指offer》面试题5从头到尾打印链表
- 剑指offer面试题之从头到尾打印链表
- 剑指offer--面试题6:从头到尾打印链表
- 【剑指offer】面试题6:从头到尾打印链表
- 剑指offer面试题5 从头到尾打印链表(c)
- 剑指offer面试题5 从头到尾打印链表(java)
- 从头到尾打印链表
- 压缩目录,排除多个子目录
- 1.css介绍及选择器
- 矩阵链乘法
- jenkins学习笔记-2-定义运行环境
- git场景命令使用
- 牛客网-剑指offer-从头到尾打印链表
- C++ _access和_waccess的使用方法
- js中逻辑运算符|| 的返回值并不只有true和false
- 反转链表
- float 和 double 的精度
- Oracle表分区详解(优缺点)
- js 格式化 extjs 的时间对象 Thu May 12 2016 08:00:00 GMT+0800 (中国标准时间)
- 刷题——Coins POJ
- ifstream&&ofstream的.csv文件读写