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

数据结构与算法之单链表面试题(新浪、百度、腾讯)

单链表面试题(新浪、百度、腾讯)
  • 求单链表中的有效节点的个数
public int getCount(HeroNode head) {Hero1 cur = head.getNext();int count = 0;while(cur != null) {count++;cur = cur.getNext();}return count;}
  • 查找单链表中的倒数第k个结点【新浪面试题】
    • 第一种思路:通过直接计算循环次数来实现查找
    • 第二种思路:定义两个结点n1,n2,先找到第k个结点n1,然后n1、n2结点同时移动。当n1到达链表尾部的后一个元素时,n2所指的就是倒数第k个结点。
/*** 返回倒数第k个结点* @param index* @return*/public Hero1 findLastIndexNode2(Hero1 head,int index) {if(head.getNext() == null) {return null;}// 找到第k个int count = getCount();if(index <= 0 || index > count) {return null;}Hero1 cur = head.getNext();for(int i = 0 ; i < count - index;i++) {cur = cur.getNext();}return cur;}/***第二种思路* @param index* @return*/public Hero1 findLastIndexNode(int index) {if(index < 0) return null;// 找到第k个Hero1 node1 = head.getNext();Hero1 node2 = head;// 代表有没有找到boolean flag = false;while(node1 != null) {index--;if(index == 0) {flag = true;break;}node1 = node1.getNext();}if(flag) {while(node1 != null) {node1 = node1.getNext();node2 = node2.getNext();}return node2;}else {return null;}}
  • 单链表的反转【腾讯面试题】
    反转链表
public void reverseLinkedList(Hero1 head) {// 如果当前链表为空,或者只有一个节点,无需反转,直接返回if(head.getNext() == null || head.getNext().getNext() == null) {return;}// 创建一个新的头结点Hero1 newHead = new Hero1();Hero1 cur = head.getNext();Hero1 nextNode;while(cur != null) {nextNode = cur.getNext();cur.setNext(newHead.getNext());newHead.setNext(cur);cur = nextNode;}head.setNext(newHead.getNext());}
  • 从尾到头打印单链表【百度,要求方式1:反向遍历。方式2:stack】
    反向打印链表
/*** 反向打印链表,利用栈的特性*/public void printReverse() {// 创建一个栈,将各个节点压入栈Stack<Hero1> stack = new Stack<>();Hero1 cur = head.getNext();// 将链表的所有节点压入栈while(cur != null) {stack.push(cur);cur = cur.getNext();}while(!stack.isEmpty()) {// 将所有的节点pop并打印Hero1 hero = stack.pop();System.out.println(hero);}}
  • 合并两个有序的单链表,合并之后的链表依然有序
/*** 合并两个有序的链表,合并之后依然有序* @param list* @return*/public void mergeLinkList(SingleList list) {Hero1 cur1 = head;Hero1 cur2 = list.head.getNext();Hero1 next;while(cur1.getNext() != null && cur2 != null) {while(cur1.getNext() != null && cur1.getNext().getNo() <= cur2.getNo()) {cur1 = cur1.getNext();}next = cur2.getNext();cur2.setNext(cur1.getNext());cur1.setNext(cur2);cur1 = cur2;cur2 = next;}if(cur1.getNext() == null) {cur1.setNext(cur2);}}
http://www.lryc.cn/news/2394892.html

相关文章:

  • 单板机8088C语言计划
  • 一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot() - 透视 (长 -> 宽,有限制)
  • 机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类
  • 【HW系列】—溯源与定位—Linux入侵排查
  • CPO-BP+MOPSO,冠豪猪优化BP神经网络+多目标粒子群算法!(Matlab源码)
  • 模块化设计,static和extern(面试题常见)
  • 【快速解决】数据库快速导出成sql文件
  • 使用 Syncfusion 在 .NET 8 中生成 PDF/DOC/XLS/PPT
  • LearnOpenGL-笔记-其十二
  • 【C++】C++面向对象设计的核心思想之一: 接口抽象、解耦和可扩展性
  • Namespace 命名空间的使用
  • mac 下安装Rust Toolchain(Nightly)
  • PHP中文网文章内容提取免费API接口教程
  • 【Java笔记】Spring IoC DI
  • 学习STC51单片机22(芯片为STC89C52RCRC)
  • ubuntu20.04.5--arm64版上使用node集成java
  • Linux --UDP套接字实现简单的网络聊天室
  • 嵌入式学习笔记 - keil安装目录下的头文件自动包含问题
  • word批量导出visio图
  • 把数据库做得能扩展:Aurora DSQL 的故事
  • 全面解析:npm 命令、package.json 结构与 Vite 详解
  • 【本地部署】 Deepseek+Dify创建工作流
  • Rust 配置解析`serde` + `toml`
  • linux进程用户态内存泄露问题从进程角度跟踪举例
  • 数据结构-图的应用,实现环形校验和拓扑排序
  • 交换机 路由器
  • 某乎x-zse-96 破解(补环境版本)
  • VSCode+Cline 安装配置及使用说明
  • Java中Redis面试题集锦(含过期策略详解)
  • Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)