zoukankan      html  css  js  c++  java
  • 从头到尾打印链表

    链表的结构很简单,它由指针把若干个节点连接成链状结构。由于链表是一种哄抬的数据结构,其操作需要对指针进行操作。因为在船舰链表时,无须知道链表的长度。当插入一个节点时,我们只需要为新节点分配内存,然后调整指针的指向来确保新节点被链接到链表当中。内存分配不是在创建链表时一次性完成的,而是每添加一个节点分配一次内存。由于没有闲置的内存,链表的空间效率比数组高。由于链表中的内存不是一次性分配的,因而我们无法保证链表的内存和数组一样是连续的。因此如果想在链表中找到它的第i个结点,我们只能从头结点开始,沿着指向下一个节点的指针遍历链表,它的时间效率为O(n).

    1、把链表的末尾节点的指针指向头节点,从而形成一个环形链表

    2、链表中的结点中除了有指向下一个结点的指针,还有指向前一个结点的指针。这就是双向链表

    3、链表中的结点中除了有指向下一个结点的指针,还有指向任意结点的指针,这就是复杂链表。

    题目:从头到尾打印链表

    输入一个链表的头结点,从尾到头反过来打印出每个结点的值

    解题思路:看到这道题目后,很自然想到从头到尾输出会比较简单,于是就想着把链表反转过来,改变链表的方向,然后就可以从头到尾输出了。但该方法会改变原来链表的结构。是否允许在打印链表的时候修改链表的结构?这个取决于面试官的需求,因此在面试的时候我们需要询问清楚面试官的要求。

    在面试中如果我们打算修改输入的数据,最好先问下面试官是不是允许做修改。

    通常打印是一个只读操作,我们不希望打印时修改内容。假设面试官也要求这个题目不能改变链表的结构。

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

  • 相关阅读:
    MySQL令人咋舌的隐式转换
    MySQL 数据库基础(二)(MySQL 服务基础与使用 MySQL 数据库)
    以友盟+U-Push为例,深度解读消息推送的筛选架构解决方案应用与实践
    逆向工程,调试Hello World !程序(更新中)
    520了,用32做个简单的小程序
    postgresql 数据库 update更新慢的原因(已解决)
    面试题单例模式的五种写法(枚举妙用)
    人工智能能力提升指导总结
    数据结构-队列(2)-循环队列
    数据结构-队列(1)
  • 原文地址:https://www.cnblogs.com/zhibei/p/9207154.html
Copyright © 2011-2022 走看看