剑指offer之从尾到头打印链表
来源:互联网 发布:消息认证算法的简称 编辑:程序博客网 时间:2024/05/23 15:37
题目描述:输入一个链表,从尾到头打印链表每个节点的值。
思路:1.首先想到采用递归的思路 从后往前打印
public class Solution {class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}ArrayList<Integer> list = new ArrayList<>();public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {if (listNode != null) {printListFromTailToHead(listNode.next);list.add(listNode.val);}return list;}}
简洁,但是开销会比较大,函数调用层次太深,会造成栈溢出
2思路:采用栈先进后出的性质,用栈保存链表结点,然后出栈import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list = new ArrayList<>();if(listNode == null){return list;//注意不是返回null,而是返回[]}Stack<ListNode> stack = new Stack<>();ListNode current = listNode;while(current!= null){stack.push(current);//遍历入栈current = current.next;}while(!stack.empty()){//出栈list.add(stack.pop().val);}return list;}}3思路:直接遍历链表保存,然后利用Collections.reverse()进行翻转
import java.util.ArrayList;import java.util.Collections;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list = new ArrayList<>();if (listNode == null) {return list;}ListNode current = listNode;while (current != null) {list.add(current.val);current = current.next;}Collections.reverse(list);return list;} }4思路:先对链表进行反转,然后进行遍历即可。
0 0
- 剑指Offer之从尾到头打印链表
- 剑指Offer之 - 从尾到头打印链表
- 剑指offer(一)之从尾到头打印链表
- 剑指offer之从尾到头打印链表
- 剑指offer之从尾到头打印链表
- 剑指offer之从尾到头打印链表
- 剑指offer之三---从尾到头打印链表
- 剑指offer:5-从尾到头打印链表
- [剑指Offer]7.从尾到头打印链表
- 剑指offer:从尾到头打印链表
- 从尾到头打印链表--《剑指offer》
- 剑指Offer:从尾到头打印链表
- 【剑指offer】从尾到头打印链表
- 【剑指offer】Q5:从尾到头打印链表
- 剑指offer系列源码-从尾到头打印链表
- 剑指offer 05: 从尾到头打印链表
- 剑指offer--从尾到头打印链表
- 剑指offer-5 从尾到头打印链表
- SQL优化:建索引的原则
- virtualbox里面,给ubuntu设置共享文件夹
- Centos7 Lamp环境搭建
- ES6新属性笔记_0
- ffmpeg 手动添加 sps pps(处理内存泄露问题)
- 剑指offer之从尾到头打印链表
- 设计模式-工厂模式
- python+机器学习方法进行情感分析
- JavaScript 继承
- msp430F5438A 定时器
- 《IBM-PC汇编语言程序设计》(清华大学出版社)笔记(三)
- C++函数重载与重载原理:命名倾轧
- 喷水装置
- Java 冒泡算法