剑指offer面试题之从头到尾打印链表
2016-03-20 16:10
344 查看
1.问题:
输入一个链表,从尾到头打印链表每个节点的值。
2,思考:
(1),笨方法:
从头到尾扫描一遍,改变next指针,变成逆向。
再扫描一遍改变后的链表,把值放入一个vector中,返回。
(2),既然是从尾到头输出,即逆序输出,即从底到上输出,而递归恰好有自底至上的性质,适应这里。
3,在牛客网上的编码为:
拿到一个题,先从宏观上把握它的思想,再从细节上考虑!
输入一个链表,从尾到头打印链表每个节点的值。
2,思考:
(1),笨方法:
从头到尾扫描一遍,改变next指针,变成逆向。
再扫描一遍改变后的链表,把值放入一个vector中,返回。
(2),既然是从尾到头输出,即逆序输出,即从底到上输出,而递归恰好有自底至上的性质,适应这里。
3,在牛客网上的编码为:
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<int> vec; vector<int> printListFromTailToHead(struct ListNode* head) { //我这笨方法还把head后边的内容变了 //真笨!!! /*if (head == NULL) { vector<int> vec; return vec; } ListNode* pPre = NULL; ListNode* p = head; ListNode* pNext = p->next; int count = 0; while (p) { count++; p->next = pPre; pPre = p; p = pNext; if (p) { pNext = p->next; } } ListNode* newHead = pPre; vector<int> temp(count); for (unsigned int i = 0; i < count; i++) { temp[i] = newHead->val; newHead = newHead->next; } return temp;*/ //参考牛人代码,利用递归的思想, //这里相当于逆序输出,而递归也是从底到上的次序返回 //正好合适这里用! if (head != NULL) { if (head->next != NULL) { printListFromTailToHead(head->next); } vec.push_back(head->val); } return vec; //代码简洁而且空间用的少,思想也好! } };反省:
拿到一个题,先从宏观上把握它的思想,再从细节上考虑!
相关文章推荐
- 阿里电话面试之所做所得所感(2015年7月)
- 深圳c#面试第三天 题目以及答案
- PHP面试 第一弹
- 信管师培训之第三节课作业(项目管理一般知识+立项管理)
- hadoop程序员软件包
- Java程序员软件包
- 不懂职场杠杆,35岁以后你就会以这样的方式被“干”掉
- Android面试题摘录(1)
- 【运维故事】职场如何领先一步?
- 程序员的自我修养 - 操作系统
- 面试问题
- Java面试题全集(上)
- 程序员学习英语
- 求职之路
- day01 html面试题--表单常用的提交方式有哪些?区别是
- 年度跳槽大戏:为什么要挑在“金三银四”折腾
- 中小学教师资格证,详情请加我QQ:120-051-422
- 程序员的自我修养——编译和链接
- 他们竟然是这样面试程序猿的!!
- 剑指offer面试题之替换空格