【剑指offer】2.从尾到头打印链表
总目录:
1. 题目内容
输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
如输入{1,2,3}的链表如下图:

返回一个数组为[3,2,1]
PS:0 <= 链表长度 <= 10000
2. 解题思路
翻转问题,
1考虑栈,因为它的先进后出特性;
2考虑递归,因为它在返回前才执行一些逻辑,其实底层实现也是栈。
3. cpp代码
使用栈
 
1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * ListNode(int x) : 6 * val(x), next(NULL) { 7 * } 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> printListFromTailToHead(ListNode* head) { 13 stack<int> s; 14 vector<int> ret; 15 16 while (head != NULL) { 17 s.push(head->val); 18 head = head->next; 19 } 20 21 while (!s.empty()) { 22 ret.push_back(s.top()); 23 s.pop(); 24 } 25 26 return ret; 27 } 28 };
使用递归
 
1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * ListNode(int x) : 6 * val(x), next(NULL) { 7 * } 8 * }; 9 */ 10 class Solution { 11 public: 12 void recurve(ListNode* cur, vector<int>& vec) { 13 if (cur == NULL) { 14 return; 15 } 16 17 //继续深入递归 18 recurve(cur->next, vec); 19 20 //存储当前值 21 vec.push_back(cur->val); 22 } 23 24 vector<int> printListFromTailToHead(ListNode* head) { 25 //创建返回值 26 vector<int> ret; 27 28 //开始递归 29 recurve(head,ret); 30 31 return ret; 32 } 33 };
 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号