(剑指Offer)面试题5:从尾到头打印链表
2015-07-06 15:07
537 查看
题目:
输入一个链表的头结点,从尾到头反过来打印每个结点的值。链表结点定义:
struct ListNode{ int value; ListNode* pNext; };
思路:
1、改变链表结构的话,先反转链表,然后从头到尾打印每个结点的值。(后续博文会有相关实现,这里就暂不实现)2、无需改变链表结构,使用栈,遍历整个链表,将结点依次入栈,然后再依次出栈,实现“后进先出”。
3、无需改变链表结构,递归实现,如果链表结点数过多的话,可能会导致栈溢出。
代码:
void PrintListReversingly_Iteratively(ListNode* pHead){ std::stack<ListNode*> nodes; ListNode* pNode=pHead; while(pNode!=NULL){ nodes.push(pNode); pNode=pNode->pNext; } while(!nodes.empty()){ pNode=nodes.top(); cout<<pNode->value<<"\t"; nodes.pop(); } cout<<endl; } void PrintListReversingly_Recursively_1(ListNode* pHead){ if(pHead==NULL) return; PrintListReversingly_Recursively_1(pHead->pNext); cout<<pHead->value<<"\t"; } void PrintListReversingly_Recursively_2(ListNode* pHead){ if(pHead!=NULL){ if(pHead->pNext!=NULL) PrintListReversingly_Recursively_2(pHead->pNext); cout<<pHead->value<<"\t"; } }
在线测试OJ:
http://www.nowcoder.com/books/coding-interviews/d0267f7f55b3412ba93bd35cfa8e8035?rp=1AC代码:
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: void printList(ListNode* head,vector<int> &nodes){ if(head!=NULL){ printList(head->next,nodes); nodes.push_back(head->val); } return; } vector<int> printListFromTailToHead(struct ListNode* head) { vector<int> nodes; printList(head,nodes); return nodes; } };
/** * 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> nodes; while(head!=NULL){ nodes.push_back(head->val); head=head->next; } reverse(nodes.begin(),nodes.end()); return nodes; } };
相关文章推荐
- 社区之星任玉刚:Android开发者的职场规划
- 程序员不是砌砖工人,他们是作家【转】
- 面试常考题---交换变量
- Hive面试题—理清hive应用思路
- 黑马程序员----总结1(继承、异常)
- 求职小技巧,赢得大机会
- 程序员屌丝逆袭之路不是炒股
- [转] - 程序员怎么学习数学
- 数据库常见面试题(一)
- 黑马程序员&mdash;Java基础(接口,类,抽象类综合小练习)
- 程序员应该读的六本书
- 字符串面试题(一)字符串逆序--转
- 《像程序员一样思考》
- 【转】8家公司笔面试经历-百度-联发科-瑞晟--
- 面试题
- 国外程序员整理的Java资源大全
- (剑指Offer)面试题4:替换空格
- 【从零单排之微软面试100题系列】02之包含 min 函数的栈
- 我面试时遇见过的Java面试题目
- 【剑指Offer学习】【面试题40:数组中只出现一次的数字】