美文网首页
数据结构入门教程-单链表经典面试题分析(2)

数据结构入门教程-单链表经典面试题分析(2)

作者: 会上树的程序猿 | 来源:发表于2020-01-08 21:48 被阅读0次

前面的一篇文章我们为了加深对链表的学习,通过一道经典的面试题单链表反转的问题进行实际代码的操作,相信大家都链表都有了好感发现其实也挺有意思的,这篇我们同样通过一道面试题来对我们的链表更上一层的学习,直接入正题.

题目

  • 实现从尾到头打印单链表

想必大家心里都有了想法,究竟怎么样的想法,先保留,看看我的思路在进行从优比较,首先来看张图:

单链表图.png

上图就是我的单链表,在结合题目的意思,无法就是对该链表进行逆序打印,既然是逆序打印的话,我可不可用上节的单链表反转呢?不猜了,我来分析下:

  • 第一种方式:我们可以对该链表进行反转操作,然后遍历好像就可以完成了哈,但是不知有没有想过,我们在反转链表时,已经破坏了链表的结构,所以这种操作不建议.
  • 方式二:我们可以借助于另外一个数据结构栈(Stack)的先进后出特性来实现对该链表的逆序打印操作.

通过简单的两种方式对比,想必大家知道怎么做了,不过关于栈数据结构这里不知道不影响我们操作,关于它的详解我们后面来说,确定了实现的思路,接下来我们用代码来实现。

代码实现
//面试题:逆序打印单链表(利用栈的特性来完成 现金后出) 不改变链表原来的结构
public static void resversePrint(HeroNode head){
    if (head.next == null){
        return; //表明是空链表,直接返回即可
    }
    //1.创建一个栈,将各个节点压入栈中
    Stack<HeroNode> stack = new Stack<>();
    //创建一个辅助指针
    HeroNode cur = head.next; //指向链表的第一个节点
    //2循环链表进行压入stack
    while (cur !=null){
        stack.push(cur); //将当前元素压入stack
        cur = cur.next; //后移动一位接着遍历
    }
    //3.将stack节点进行打印
    while (stack.size() > 0){
      //方法stack.pop()出栈的操作
        System.out.println(stack.pop());
    }
}

代码分为了3步实现,有详细的注释,这里就不多说了,我们来测试一把,代码如下:

public class SingleLinkListCase {

    public static void main(String[] args) {
    //创建节点
    HeroNode node1 = new HeroNode(1,"宋江","及时雨");
    HeroNode node2 = new HeroNode(2,"卢俊义","玉麒麟");
    HeroNode node3 = new HeroNode(3,"吴用","智多星");
    HeroNode node4 = new HeroNode(4,"林冲","豹子头");
    //创建链表,并添加
    SingleLinkList singleLinkList = new SingleLinkList();
    singleLinkList.addOrderByNo(node1);
    singleLinkList.addOrderByNo(node4);
    singleLinkList.addOrderByNo(node2);
    singleLinkList.addOrderByNo(node3);
    //显示链表
    singleLinkList.show();
    System.out.println("逆序打印链表测试=============");
    resversePrint(singleLinkList.getHead());

结果如图所示:

逆序打印链表结果图.png

从结果图可以看出,我们实现了单链表的逆序打印,亲测有效,不信你试试喽~

相关文章

  • 数据结构入门教程-单链表经典面试题分析(2)

    前面的一篇文章我们为了加深对链表的学习,通过一道经典的面试题单链表反转的问题进行实际代码的操作,相信大家都链表都有...

  • 数据结构入门教程-单链表经典面试题分析

    上节我们通过一个梁山好汉排行傍的案例分析了单链表的基本用法,这节我们通过一个经典的面试题来加深对单链表的学习,不扯...

  • 链表反转

    概述 链表反转是非常经典的面试题,要实现此功能,需先实现链表的数据结构。 链表类 获得单向链表方法 输出单向链表方...

  • 数据结构与算法系列-目录

    数据结构和算法目录表 线性结构 1.数组、单链表和双链表 2.Linux内核中双向链表的经典实现 栈 队列 树形结...

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

  • 大厂面试系列(七):数据结构与算法等

    数据结构和算法 链表 链表,常见的面试题有写一个链表中删除一个节点的算法、单链表倒转、两个链表找相交的部分,这个一...

  • 专项练习数据结构之链表

    1.链表:单链表,双链表,循环链表 2.单链表 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表...

  • 数据结构基础2

    1.单链表的数据结构+案例2.双链表的数据结构+案例3.栈的数据结构(双向链表+数组实现) + 案例4.队列的数据...

  • 数据结构 | 其二 链表

    冰河winner - 数据结构之链表 2.1 单向链表 数据结构(一) 单链表的实现-JAVA 2.2 双端链表 ...

网友评论

      本文标题:数据结构入门教程-单链表经典面试题分析(2)

      本文链接:https://www.haomeiwen.com/subject/rffeactx.html