剑指offer(三)从尾到头打印链表
来源:互联网 发布:网络销售应该怎么做 编辑:程序博客网 时间:2024/05/17 16:44
- 题目
- 输入一个链表,从尾到头打印链表每个节点的值。
- 案例
- 输入一个链表,将值打印出来(我的案例上是将值放到ArrayList中去)
ListNode root = new ListNode(); root.val = 1; root.nxt = new ListNode(); root.nxt.val = 2; root.nxt.nxt = new ListNode(); root.nxt.nxt.val = 3; root.nxt.nxt.nxt = new ListNode(); root.nxt.nxt.nxt.val = 4; root.nxt.nxt.nxt.nxt = new ListNode(); root.nxt.nxt.nxt.nxt.val = 5;
输出或返回 [5, 4, 3, 2, 1]
- 分析题目
- 大家都知道,链表类结构,简单说,就是不断向子集嵌套的结构。
- 所以我的第一想法就是用递归,然后也实现出来通过了
- 但是我想应该不会那么简单吧,递归也太简单了
- 果不其然,网上好多都是用容器vector和配接器stack来实现
- 然后又查了一下,又想到一种方法。Collections的reverse();
- 解题代码(一):递归
import java.util.ArrayList;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list = new ArrayList<Integer>(); if( listNode != null ) println(listNode, list); return list; } private void println(ListNode listNode, ArrayList<Integer> list){ if( listNode.next != null ) { println(listNode.next, list); } list.add(listNode.val); }}
- 解题代码(二):用容器vector和配接器stack来实现
/** * 剑指offer(从尾到头打印链表) * @param listNode * @return */ public static ArrayList<Integer> printListFromTailToHeadSecond(ListNode listNode) { ArrayList<Integer> list = new ArrayList<Integer>(); if(listNode == null) return list; Stack<Integer> stack = new Stack<Integer>(); ListNode temp = listNode; while(temp != null){ stack.push( temp.val ); temp = temp.next; } while( !stack.empty() ){ list.add( stack.pop() ); } return list; }
- 解题代码(三):
import java.util.Collections;import java.util.ArrayList;/** * 剑指offer(从尾到头打印链表) * @param listNode * @return */public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list = new ArrayList<Integer>(); if( listNode == null ) return list; ListNode temp = listNode; while(temp != null){ list.add( temp.val ); temp = temp.next; } Collections.reverse(list); return list; }}
- 总结
- 第一种递归虽然代码简洁,看似效率比较高,但是如果链表太长的话,递归太深,则容易造成堆栈的溢出
- 第二种是将链表的值从头到尾加入栈中,这样栈输出的时候,就会是倒着的
- 第三种直接放入list中,然后利用Collections的reverse方法,取巧借用了封装的方法,但是效率应该是最高的。
阅读全文
1 0
- 剑指offer(三)从尾到头打印链表
- 剑指Offer(三)从尾到头打印链表
- 剑指offer之三---从尾到头打印链表
- 剑指offer(三) 从尾到头打印链表
- 剑指offer(从尾到头打印链表)
- 剑指offer(4):从尾到头打印链表
- 剑指offer(3)-从尾到头打印链表
- 剑指offer--(3) 从尾到头打印链表
- 剑指offer--从尾到头打印链表(5)
- (三)剑指offer之从尾到头打印链表
- 剑指offer[三]:从尾到头打印链表(java和c++版本)
- 剑指offer:5-从尾到头打印链表
- [剑指Offer]7.从尾到头打印链表
- 剑指offer:从尾到头打印链表
- 从尾到头打印链表--《剑指offer》
- 剑指Offer:从尾到头打印链表
- 【剑指offer】从尾到头打印链表
- 【剑指offer】Q5:从尾到头打印链表
- inno setup添加pascal代码检测旧版本程序
- 使用application(servletContext)统计网站访问次数,及重启服务器后如何延续
- String学习(十六)-使用Xml文件配置事务
- 文章标题
- 14.IDA-XREF(交叉引用)概述
- 剑指offer(三)从尾到头打印链表
- Jquery中的bind(),on()绑定事件方式总结
- 【23种设计模式】结构型模式 > 外观模式
- Flutter实战一Flutter聊天应用(十九)
- 几个深度学习库
- 选择排序之简单选择
- 15.IDA-查看XREF列表
- Linux中在线安装MySQL数据库
- C# 之分数的 加 减 乘 除 取余数