从尾到头打印链表(java)
来源:互联网 发布:photoshop cs4 mac 编辑:程序博客网 时间:2024/06/05 15:52
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
通常打印是一个只读操作,我们不希望打印时修改内容。
接下来我们想到解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到的结点第一个输出。这就是典型的“ 后进先出”,可以用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。
package offer;import java.util.Stack;public class PrintListReverse {public static void main(String[] args) {ListNode node1 = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);node1.next = node2;node2.next = node3;printReverseList(node1);System.out.println();printReverseListRecursive(node1);}/** * 从尾到头打印链表 * @param root */public static void printReverseList(ListNode root){if(root==null) return;ListNode node = root;Stack<ListNode> stack = new Stack<ListNode>();while(node!=null){stack.push(node);node = node.next;}while(!stack.isEmpty()){int val = stack.pop().val;System.out.print(val+" ");}}/** * 递归写法 * @param root */public static void printReverseListRecursive(ListNode root){if(root==null) return;printReverseList(root.next);System.out.print(root.val+" ");}public static void printReverseListRecursive2(ListNode root){if(root!=null){if(root.next!=null){printReverseListRecursive2(root.next);}System.out.print(root.val+" ");}}}/*class ListNode{ListNode next;int val;}*/
既然想到了用栈实现这个函数,而递归在本质上就是一个栈结构,于是很自然地用想到了用递归来实现。要实现反过来输出链表,我们每访问到一个结点的时候,先递归输出它后面的结点,再输出该结点本身。
0 0
- java从尾到头打印链表
- 从尾到头打印链表(java)
- 从尾到头打印链表(java)
- 从尾到头打印链表(Java)
- 剑指offer题解【从尾到头打印链表】-java
- 剑指offer-Java-从尾到头打印链表
- 剑指offer:从尾到头打印链表(java)
- 剑指offer-----从尾到头打印链表(java版)
- Java算法-剑指offer-从尾到头打印链表
- 从尾到头打印链表(java版)
- 从尾到头打印链表java实现
- (转)java语言:从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 存同求异 开发思路
- DLL与远程线程注入
- om.android.ide.common.process.ProcessException
- 关于百度地图在打包签名后key验证失效的坑
- Java数组操作的方法
- 从尾到头打印链表(java)
- 打印竖式
- SQL基本知识语法
- 基础总结篇之二:Activity的四种launchMode
- 拆箱与装箱
- Java中hashCode的作用
- Reverse Integer
- Volatile关键词深度剖析
- Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法