剑指offer:从尾到头打印链表
来源:互联网 发布:计算机应用与软件投稿 编辑:程序博客网 时间:2024/05/13 08:26
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
方法1:用栈作为临时变量存储
【运行时间:16ms 占用内存:8220k】
思路:遍历链表,依次做压栈操作。最后从栈尾依次取数据放入list中。
/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**//*public class Solution { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { if(listNode!=null){ this.printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; }} */import java.util.*;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack=new Stack<Integer>(); while(listNode!=null){ stack.push(listNode.val); listNode=listNode.next; } ArrayList<Integer> list=new ArrayList<Integer>(); while(!stack.isEmpty()){ list.add(stack.pop()); } return list; }}
方法2:用两个ArrayList
【运行时间:16ms 占用内存:7716k】
import java.util.*;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list=new ArrayList<Integer>();//最终输出的list ArrayList<Integer> listTemp=new ArrayList<Integer>();//中间变量, while(listNode!=null){ listTemp.add(listNode.val); listNode=listNode.next; } //将listTemp从尾部取出放入list中 for(int i=listTemp.size()-1;i>=0;i--){ list.add(listTemp.get(i)); } return list; }}
方法3:用递归来实现
【运行时间:21ms 占用内存:8264k】
此方法参考牛客网牛油解答,递归的效率貌似不怎么高。
import java.util.ArrayList;public class Solution {//将 ArrayList作为全局变量来操作 ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {if(listNode!=null){ printListFromTailToHead(listNode.next); arrayList.add(listNode.val); } return arrayList; }}
方法4:用Collections类的reverse方法
import java.util.ArrayList;public class Solution { ArrayList<Integer> arrayList=new ArrayList<Integer>(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {while(listNode!=null){ arrayList.add(listNode.val); listNode=listNode.next; } Collections.reverse(arrayList); return arrayList; }}
方法5:递归2
【运行时间:13ms 占用内存:8404k】
import java.util.ArrayList;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> arrayList=new ArrayList<Integer>(); if(listNode==null)return arrayList; getReverse(listNode,arrayList); return arrayList; } public void getReverse(ListNode node, ArrayList<Integer> list){ if(node==null)return; getReverse(node.next,list); list.add(node.val); }}
阅读全文
1 0
- 剑指offer:5-从尾到头打印链表
- [剑指Offer]7.从尾到头打印链表
- 剑指offer:从尾到头打印链表
- 从尾到头打印链表--《剑指offer》
- 剑指Offer:从尾到头打印链表
- 【剑指offer】从尾到头打印链表
- 【剑指offer】Q5:从尾到头打印链表
- 剑指Offer之从尾到头打印链表
- 剑指offer系列源码-从尾到头打印链表
- 剑指offer 05: 从尾到头打印链表
- 剑指offer--从尾到头打印链表
- 剑指offer-5 从尾到头打印链表
- 剑指Offer之 - 从尾到头打印链表
- 剑指offer 5 -从尾到头打印链表
- 剑指offer: 从尾到头打印链表(链表)
- 《剑指Offer》面试题:从尾到头打印链表
- 剑指offer:从尾到头打印链表
- 剑指offer:从尾到头打印链表代码实现
- 《BLINKS: Ranked Keyword Searches on Graphs》——论文笔记
- HTML xmlns 属性
- 比特币小算力分支币比特现金(BCC)事件的起因
- 网络请求篇---Volley框架
- Atmel Studio-SAM单片机开发 ---新建工程
- 剑指offer:从尾到头打印链表
- java读取bitmap文件
- Alternative Thinking
- nyoj-195 飞翔【动态规划】
- (一) docker简介及组成-------学习笔记
- get和post的区别
- 反射---第十九天
- 单链表的基本操作(第一篇)
- 【Linux】【Docker】CentOs 6.x升级内核到3.10, 安装并升级docker1.9.1