博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试题5:从尾到头打印链表
阅读量:6872 次
发布时间:2019-06-26

本文共 1645 字,大约阅读时间需要 5 分钟。

三种方法:

1、借用栈倒序输出链表

    因为栈是先进后出,把链表中的元素存进栈中,链表前面的元素在栈底,后面的元素在栈顶,链表后面的元素先出栈

2、先翻转链表,再按顺序打印(主要是想自己实现单链表的翻转,这种实现方式破坏了链表的结构,当然再翻转一下就还原了)

     翻转链表的步骤:
     (1)将当前节点的next节点指向他以前的前一个节点
     (2)当前节点下移一位
     (3)如果是最后一个节点,就把它的next节点指向它以前的前一个节点,并推出循环

3、用递归实现

     正如那位哥们所说,递归就是一个进栈出栈的过程,链表前面的元素先进栈,在栈底,后面的元素后进栈,在栈顶,先出栈,哈哈。。。

接下来我们想到解决这个问题肯定要遍历链表。遍历的顺序是从头到尾的顺序,可输出的顺序却是从尾到头。也就是说第一个遍历到的结点最后一个输出,而最后一个遍历到的结点第一个输出。这就是典型的“ 后进先出”,可以用栈实现这种顺序。每经过一个结点的时候,把该结点放到一个栈中。当遍历完整个链表后,再从栈顶开始逐个输出结点的值,此时输出的结点的顺序已经反转过来了。

 

package shuzu;import java.util.Stack;  public class PrintListReversingly {    public static void main(String[] args) {        // TODO Auto-generated method stub        Node n1 = new Node();        Node n2 = new Node();        Node n3 = new Node();        n1.key = 1;        n1.next = n2;        n2.key = 2;        n2.next = n3;                n3.key = 3;        n3.next = null;                Node head = n1;        printListRecursively(head);        printListIteratively(head);    }    /**     * 递归的方式     * @param n     */    public static void printListRecursively(Node n){        if(null != n){            printListRecursively(n.next);            System.out.println(n.key);        }    }        /**     * 入栈、弹栈的方式     * @param n     */    public static void printListIteratively(Node n){        Stack
s_node = new Stack
(); //入栈 while (n != null) { s_node.push(n); n = n.next; } //弹栈、打印 while (!s_node.empty()) { System.out.println(s_node.pop().key); } }}class Node{ int key; Node next;}

 

输出结果:

3

2
1
3
2
1

 

转载于:https://www.cnblogs.com/Donnnnnn/p/5742928.html

你可能感兴趣的文章
Heritrix 3.1.0 源码解析(十六)
查看>>
uva 270 Lining Up
查看>>
数组集合oracle 11g PL/SQL Programming学习五
查看>>
[Python] 安装及环境配置
查看>>
Qt中float类型与QString类型相互转换
查看>>
cocos2d-x学习笔记之辅助工具
查看>>
C/C++程序员应聘常见面试题剖析(经典)
查看>>
ASP.net Web API综合示例
查看>>
ie6下a标签使用location.href 不跳转的解决办法
查看>>
向量样本【模式识别】感知器 Perceptron
查看>>
委托杂谈
查看>>
《Android内核剖析》读书笔记 第7章 理解Context
查看>>
IOS开发之UILabel动态高度设置方法
查看>>
儿子购买的书
查看>>
让Android中的webview支持页面中的文件上传
查看>>
hbase regionserver挂掉的问题
查看>>
延迟段创建的学习-实验
查看>>
C/C++ 内存对齐
查看>>
php 在函数内引用全局变量 讲解引用
查看>>
数据结构和算法系列1 线性表之顺序表
查看>>