当前位置: 首页 > news >正文

架构师面试(二十七):单链表

问题

今天的问题对于架构师来说会相对容易许多。今天出一个【数据结构与算法】相关的题目,醒醒脑。

给一张【单链表】,该单链表有100个节点元素(当然,事先我们是不知道100这个数目的),要获取倒数第8个元素的值,时间复杂度最小应该是多少呢?

    A、108;

    B、100;

    C、92;

    D、8。

(提示一下:这是数据结构中一个非常典型的小型算法,有栈实现方案、队列实现方案和双指针实现方案等!)

解析

图片

获取单链表倒数第 x 个元素(如上图所示,假设 x = 3),有这样几种常用方案:

方案一:栈实现方案

        

图片

        顺序遍历单链表,将所有的节点元素顺序“入栈”;然后再执行“出栈”操作,第 x 次“出栈”的元素就是单链表中倒数的第  x 个元素;该方案的时间复杂度 为 单链表长度  len + x。

方案二:队列实现方案

图片

       准备一个长度为 x 的队列;顺序遍历单链表,将所有的节点元素顺序“入队”(入队过程中,如果队列已满,则“出队”一个元素后,再“入队”,周而复始,让队列始终保持队满状态);当单链表最后一个元素“入队”后,此时队首元素即是单链表中倒数的第 x 个元素(当然,此时的队列需要是满的状态); 该方案的时间复杂度为 单链表的长度 len。

方案三:双指针实现方案

图片

     准备两个指针 p 和 q,让 p 指向单链表的首元素,让 q 指向单链表的第 x 个元素; 然后两个指针一起向后移动, 当 q 指向单链表最后一个元素时,指针 p 指向的元素即是单链表倒数的第 x 个元素; 该方案的时间复杂度为 单链表的长度 len。

数据结构中任何一个问题,几乎都可以至少找到两种解决方案,是不是很奇妙?!

参考答案

B

相关文章:

  • 【嵌入式学习3】UDP发送端、接收端
  • 数据库系统-数据库控制
  • 大模型快速 ASGI 服务器uvicorn
  • 石头剪刀布游戏
  • linux sudo不需要输入密码
  • 通过 itms-services 协议下载安装 IOS 应用
  • Shiro学习(六):Shiro整合CAS实现单点登录
  • JSON 是什么?通俗详解
  • Opencv计算机视觉编程攻略-第十节 估算图像之间的投影关系
  • 【力扣hot100题】(059)单词搜索
  • 华为IP(4)
  • 面试自我介绍
  • 介绍几种创意登录页(含完整源码)
  • Go语言-初学者日记(五):文件操作与 JSON 实战
  • PHP 项目搭建 ELK 日志监控体系完整指南
  • 第三方检测报告—科技成果鉴定测试
  • Ansible YAML 基础语法与关键词 的详细指南
  • 网络编程—TCP/IP模型(IP协议)
  • 若依系统弹窗父子页面传参数
  • 45.跳跃游戏 II
  • 南阳做网站aokuo/企业网站设计论文
  • 建设政府网站的意义/建站之星
  • 医疗美容医院网站建设/公关公司一般收费标准
  • ps做网站首页步骤/网站收录查询站长工具
  • 动态网站设计心得体会/网站页面怎么优化
  • 北京软件开发公司滕迎江/镇江百度seo