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

news2025/6/3 10:52:35
单链表面试题(新浪、百度、腾讯)
  • 求单链表中的有效节点的个数
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.coloradmin.cn/o/2394892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单板机8088C语言计划

计划将原来用汇编写的小程序&#xff0c;用C语言重新写一遍 计划2个月能完成 然后再试试&#xff0c;能不能用C写一下固件BootLoad 和一个类似Dos时代的Debug调试器

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot() - 透视 (长 -> 宽,有限制)

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili pivot() 是 pandas 中用于数据重塑的核心方法&#xff0c;它将长格式数据转换为宽格式数据&#xff0c;与 melt() 方…

机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类

1.定义和特点 2.划分式聚类&#xff1a;K-Means 、 K-Medoids 3.层次聚类&#xff1a;树状图 4.密度聚类&#xff1a;DBSCAN 5.聚类的应用 一、定义和特点 机器学习中的无监督学习聚类是一种通过数据内在结构将样本分组的技术&#xff0c;无需预先标注的类别标签。 它的核心目…

【HW系列】—溯源与定位—Linux入侵排查

文章目录 一、Linux入侵排查1.账户安全2.特权用户排查&#xff08;UID0&#xff09;3.查看历史命令4.异常端口与进程端口排查进程排查 二、溯源分析1. 威胁情报&#xff08;Threat Intelligence&#xff09;2. IP定位&#xff08;IP Geolocation&#xff09;3. 端口扫描&#x…

CPO-BP+MOPSO,冠豪猪优化BP神经网络+多目标粒子群算法!(Matlab源码)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CPO-BPNSGA&#xff0c;冠豪猪优化BP神经网络粒子群算法&#xff01;&#xff08;Matlab完整源码和数据&#xff09;&#xff0c;冠豪猪算法优化BP神经网络的权值和阈值&#xff0c;运行环境Matlab2020b及以上。 多…

模块化设计,static和extern(面试题常见)

文章目录 一、函数的声明和定义1.1 单个文件1.2 多个文件1.3 static和extern1.3.1 static修饰局部变量1.3.2 static修饰全局变量1.3.3 static修饰函数 总结 一、函数的声明和定义 1.1 单个文件 一般我们在使用函数的时候&#xff0c;直接将函数写出来就使用了 题目:写一个函数…

【快速解决】数据库快速导出成sql文件

1、cmd直接打开 输入命令 mysqldump -u用户名 -p密码 数据库名 > 导出文件名.sql修改成自己mysql的用户名和密码&#xff0c;和要导出的数据库名称&#xff0c;给导出的文件起一个名字。 如图所示 这样就成功了。

LearnOpenGL-笔记-其十二

今天我们来将LearnOpenGL的高级光照部分彻底完结&#xff1a; Bloom 泛光是一个非常常见的用于改善图像质量的手段&#xff0c;其主要做法就是将某个高亮度区域的亮度向四周发善以实现该区域更亮的视觉效果&#xff08;因为显示器的亮度范围有限&#xff0c;需要通过泛光来体…

Namespace 命名空间的使用

名字空间&#xff1a;划分更多的逻辑空间&#xff0c;有效避免名字冲突的问题 1.什么是命名空间 名字命名空间 namespace 名字空间名 {...} // 名字空间 n1 域 namespace n1 {// 全局变量int g_money 0;void save(int money){g_money money;}void pay(int money){g_money - m…

mac 下安装Rust Toolchain(Nightly)

你可以用 Homebrew 安装 rustup&#xff0c;这是推荐的管理 Rust toolchain的 brew install rustup-init安装 Rust&#xff08;包含 rustup&#xff09; rustup-init安装过程中会让你选择安装那个&#xff0c;直接回车选择默认的即可 安装完成后&#xff0c;cargo, rustc, r…

学习STC51单片机22(芯片为STC89C52RCRC)

记住这个AT指令千万不要去脑子记&#xff0c;要用手册查 每日一言 努力不是为了感动谁&#xff0c;而是为了不辜负自己的野心。 硬件&#xff1a;ESP8266 wife模块 蓝牙&#xff0c;ESP-01s&#xff0c;Zigbee&#xff0c;NB-lot等通信模块都是基于AT指令的设计 老样子 我们用…

Linux --UDP套接字实现简单的网络聊天室

一、Server端的实现 1.1、服务端的初始化 ①、创建套接字&#xff1a; 创建套接字接口&#xff1a; #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); //1. 这是一个创建套接字的接…

word批量导出visio图

具体步骤 修改word格式打开VBA窗口插入代码运行代码 修改word格式 将word文档修改为docm格式 打开VBA窗口 打开开发工具VisualBasic项&#xff0c;如果没有右键在自定义功能区添加 插入代码 插入 -> 模块&#xff0c;代码如下&#xff1a; Sub ExportAllVisioDiagrams()D…

【本地部署】 Deepseek+Dify创建工作流

文章目录 DeepseekDify 简介流程1、下载Docker2、Dify下载3、使用浏览器打开 Deepseek Deepseek 是一款功能强大的 AI 语言模型工具&#xff0c;具备出色的理解与生成能力。它可以处理各种自然语言任务&#xff0c;无论是文本创作、问答&#xff0c;还是数据分析与解释&#x…

数据结构-图的应用,实现环形校验和拓扑排序

文章目录 一、如何理解“图”&#xff1f;1.什么是图&#xff1f;2.无向图和有向图3.无权图和有权图 二、JGraphT-图论数据结构和算法的 Java 库1.引入Maven依赖2.环形校验2.1 什么是循环依赖 &#xff1f;2.2 单元测试代码2.3 情况1&#xff1a;自己依赖自己2.4 情况2&#xf…

某乎x-zse-96 破解(补环境版本)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、总体概述二、请求分析分析请求流程三、逆向分析总结一、总体概述 本文主要实现某乎x-zse-96 破解(补环境版本),相关的链接: https://www.zhihu.com/search?type=content&q=%25E7%258…

VSCode+Cline 安装配置及使用说明

安装配置 打开VSCode&#xff0c;点击左侧Extension图标&#xff0c;在弹出页面中&#xff0c;检索Cline&#xff0c;选择Cline进行安装。 安装完毕&#xff0c;在左侧会出现一个图标&#xff0c;点击图标 选择【Use your own API key】&#xff0c;在出来的界面中选择大模型&…

Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)

Apache Maven 是一款广泛应用于 Java 项目的项目管理和构建工具。 本文提供在 Windows、Linux 和 macOS 系统上安装与配置 Maven 的详细步骤&#xff0c;旨在帮助开发者快速搭建高效的构建环境。 一、前置条件&#xff1a;安装 Java Development Kit (JDK) Maven 依赖于 Java …

android 媒体框架之MediaCodec

一、MediaCodec 整体架构与设计思想 MediaCodec 是 Android 底层多媒体框架的核心组件&#xff0c;负责高效处理音视频编解码任务。其架构采用 生产者-消费者模型&#xff0c;通过双缓冲区队列&#xff08;输入/输出&#xff09;实现异步数据处理&#xff1a; 输入缓冲区队列…

堆与堆排序及 Top-K 问题解析:从原理到实践

一、堆的本质与核心特性 堆是一种基于完全二叉树的数据结构&#xff0c;其核心特性为父节点与子节点的数值关系&#xff0c;分为大堆和小堆两类&#xff1a; 大堆&#xff1a;每个父节点的值均大于或等于其子节点的值&#xff0c;堆顶元素为最大值。如: 小堆&#xff1a;每个…