LeetCode每日一题:剑指 Offer 06. 从尾到头打印链表

思路一:利用栈的特性辅助求解

众所周知,栈这种数据结构的特性就是先进后出,那么我们可以先遍历链表,把链表内的数据全都push到栈里面,然后再通过pop操作获取数据放到数组里面,这样就完成了题目的要求

  • 代码实现:

    class Solution {
     public int[] reversePrint(ListNode head) {
     
      Stack<Integer> stack = new Stack<>(); 
      while(head != null){
          stack.push(head.val);
          head = head.next;
      }
    
      int[] res = new int[stack.size()];
      int i = 0;
      while(i < res.length){
          res[i] = stack.pop();
          i++;
      }
      return res;
      }
    }
    

思路二:利用递归实现

解题思路:利用递归: 先走至链表末端,回溯时依次将节点值加入列表 ,这样就可以实现链表值的倒序输出。这个例子充分说明了递归本质上就是一个栈,先进后出。

  • 代码实现:
 class Solution {
ArrayList<Integer> arr = new ArrayList<>();
public int[] reversePrint(ListNode head) {
   getRes(head);
  
  int[] intArr = arr.stream().mapToInt(Integer::intValue).toArray();
   return  intArr;
}
public void getRes(ListNode head){
    if(head != null){
       reversePrint(head.next);
       arr.add(head.val);
   }
}
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容