剑指offer 从尾到头打印链表
2017-11-09 23:22
351 查看
题目描述
输入一个链表,从尾到头打印链表每个节点的值。思路
总共有五种方法,如下:1. 将原链表的值存在一个栈中,然后再将栈输出到另一个vector数组里。
2. 直接将原链表的值存在一个vector数组里,最后reverse翻转一下。
3. 每插入一个,都放到最前面,复杂度是n2,不是很高效。
4. 通过递归到最后一个值,再一层一层输入到vector数组里。
5. 直接将链表翻转。
代码
1.class Solution { public: vector<int>printListFromTailToHead(ListNode*head) { int digit; stack<int> f; vector<int> res; ListNode *t = head; while(t != NULL) { f.push(t->val); t = t->next; } while(!f.empty()) { digit = f.top(); f.pop(); res.push_back(digit); } return res; } };
2.
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> res; while(head != NULL) { res.push_back(head->val); head = head->next; } reverse(res.begin(),res.end()); return res; } };
3.
class Solution { public: vector<int> printListFromTailToHead(struct ListNode* head) { vector<int> res; if(head != NULL) { while(head != NULL) { res.insert(res.begin(),head->val); head = head->next; } } return res; } };
4.
class Solution { public: vector<int> res; vector<int> printListFromTailToHead(ListNode* head) { if(head!=NULL){ printListFromTailToHead(head->next); res.push_back(head->val); } return res; } };
5.
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> res; ListNode *pre = NULL; ListNode *p = NULL; while(head != NULL) { p = head->next; //p为head的下一个节点 head->next = pre;//指向前一个节点 pre = head;//向后移动 head = p;//向后移动 } while(pre != NULL) { res.push_back(pre->val); pre = pre->next; } return res; } };
相关文章推荐
- 剑指Offer: 面试题5 从尾到头打印链表
- 剑指offer:从尾到头打印链表
- 《剑指offer》问题6 从尾到头打印链表 Java实现
- 剑指offer 面试题5 从尾到头打印链表
- 《剑指offer》【面试题5:从尾到头打印链表】
- 《剑指offer》刷题笔记(链表):从尾到头打印链表
- 剑指offer——从尾到头打印链表
- 剑指offer--从尾到头打印链表 java实现
- 剑指offer系列-从尾到头打印链表
- 《剑指Offer》学习笔记——从尾到头打印链表
- 剑指offer-面试题5.从尾到头打印链表
- 从尾到头打印链表--《剑指offer》
- 剑指offer-从尾到头打印链表
- 剑指offer--面试题5:从尾到头打印链表--Java实现
- 剑指offer面试题5:从尾到头打印链表
- 剑指offer:(3)单链表:从尾到头打印链表
- 剑指Offer(Java版):从尾到头打印链表
- 剑指offer之面试题5:从尾到头打印链表
- 剑指Offer——(3)从尾到头打印链表
- 牛客网-《剑指offer》-从尾到头打印链表