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

java链表常见简单面试算法题

  1. 头插法、尾插法
    头插法:先待插入指向头结点的next,后头结点的next指向待插入。
    尾插法:借助尾指针,直接插入
 /*** 头插法* @param head* @return*/public static Node head_insert(Node head, int t){Node node=new Node(t);node.setNext(head.getNext());head.setNext(node);return head;}/*** 尾插法* @param head* @return*/public static Node tail_insert(Node head,int t){Node tail=head;Node target=new Node(t);while (tail.getNext()!=null){tail=tail.getNext();}tail.setNext(target);return head;}
}
  1. 单链表翻转
    力扣:LCR 024. 反转链表
    将翻转前的链表记pre,翻转后的记next(也是head)。结点依次翻转。
class Solution {public ListNode reverseList(ListNode head) {ListNode pre=null;ListNode next=null;while (head!=null){next=head.next;head.next=pre;pre=head;head=next;}return pre;}
}
  1. 链表成环判断
    力扣:141. 环形链表
    定义两个指针slow、fast,slow走一步,fast走两步遍历链表。相遇就有环
public class Solution {public boolean hasCycle(ListNode head) {ListNode slow=head;ListNode fast=head;while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=slow.next;if(slow==fast){return true;}}return false;}
}
  1. 链表成环位置判断
    力扣:LCR 022. 环形链表 II
    在这里插入图片描述
    (1)定义一个A指针(指向开始点A)、B指针(指向相遇点B)。以相同速度移动,相遇点就是环的入口。
public class Solution {public ListNode detectCycle(ListNode head) {Boolean result=false;ListNode slow=head;ListNode fast=head;while (slow!=null&&fast!=null&&fast.next!=null){slow=slow.next;fast=fast.next.next;if(slow==fast){result=true;break;}}if(result==false){return null;}slow=head;while (slow!=fast){slow=slow.next;fast=fast.next;}return slow;}
}

(2)为什么慢指针和快指针相遇时一定没走完一圈?
将环平铺展开,假设慢指针走完一圈了,快指针走两圈的距离。在下图中看出快指针已经超过了慢指针,中途一定有相遇的瞬间。
在这里插入图片描述

  1. 链表成环长度判断
    在上一题找到环入口的前提下,再定义一个指针,绕一圈环并记数。
  2. 有序链表的合并
    力扣:21. 合并两个有序链表
    定义一个pre指针,始终指向已经排好序的链表尾结点。定义一个虚拟节点作为pre的初始节点。
    依次遍历两个链表取出小的那个结点作为pre的下一个结点。
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode head=new ListNode(0);ListNode pre=head;while(list1!=null&&list2!=null){if(list1.val<list2.val){pre.next=list1;pre=list1;list1=list1.next;}else{pre.next=list2;pre=list2;list2=list2.next;}}if(list1==null){pre.next=list2;}else{pre.next=list1;}return head.next;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 优化 .NET Core 应用程序的安全性和性能以应对高负载
  • 前端vue 实现取色板 的选择
  • 【Ant-design】Form表单如何实现某个属性根据接口code显示对应的表单校验效果
  • 揭秘”大模型加速器”如何助力大模型应用
  • AI绘画何以突飞猛进? 从历史到技术突破, 一文读懂火爆的AI绘画发展史
  • 若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)
  • Python pdfplumber库:轻松解析PDF文件
  • odoo模型继承
  • Android初学者书籍推荐
  • 高智能土壤养分检测仪:农业生产的科技新助力
  • 数据结构——约瑟夫环C语言链表实现
  • 短视频商城系统源码揭秘:架构设计与实现
  • 信立方大模型 | 以AI之钥,开拓智能守护新疆界
  • 访问控制的定义与原理
  • LeetCode122.买卖股票的最佳时机II(动态规划)
  • Angular2开发踩坑系列-生产环境编译
  • CentOS 7 修改主机名
  • iOS小技巧之UIImagePickerController实现头像选择
  • Js基础知识(四) - js运行原理与机制
  • Just for fun——迅速写完快速排序
  • Linux各目录及每个目录的详细介绍
  • React-Native - 收藏集 - 掘金
  • vue中实现单选
  • windows下使用nginx调试简介
  • 前端之React实战:创建跨平台的项目架构
  • 如何选择开源的机器学习框架?
  • 三分钟教你同步 Visual Studio Code 设置
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 通过git安装npm私有模块
  • 学习使用ExpressJS 4.0中的新Router
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 找一份好的前端工作,起点很重要
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • (1)(1.11) SiK Radio v2(一)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (办公)springboot配置aop处理请求.
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (排序详解之 堆排序)
  • (一)插入排序
  • (原創) 物件導向與老子思想 (OO)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • ***测试-HTTP方法
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net - 类的介绍
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net开发时的诡异问题,button的onclick事件无效