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

知识改变命运 数据结构【链表面试题】

1. 删除链表中等于给定值 val 的所有节点。 OJ链接

在这里插入图片描述

 public ListNode removeElements(ListNode head, int val) {if (head==null) {return null;}ListNode cur=head.next;ListNode pre=head;while(cur!=null) {if(cur.val==val) {pre.next=cur.next;cur=cur.next;}else {pre=cur;cur=cur.next;}}if(head.val==val)head=head.next;return head;}
}

在这里插入图片描述

2. 反转一个单链表。 OJ链接

在这里插入图片描述

class Solution {public ListNode reverseList(ListNode head) {if (head == null) {return null;}ListNode cur = head.next;head.next = null;while (cur != null) {ListNode C = cur.next;cur.next = head;head = cur;cur = pre;}return head;}}

3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结

点。OJ链接
在这里插入图片描述

class Solution {public ListNode middleNode(ListNode head) {ListNode fast=head;ListNode slow=head;while(slow!=null&&slow.next!=null) {fast=fast.next;slow=slow.next.next;}return fast;}
}

4. 输入一个链表,输出该链表中倒数第k个结点。 OJ链接

在这里插入图片描述

方法1

 public int kthToLast2( int k) {if(k <= 0 ) {return -1;}ListNode fast = head;ListNode slow = head;int count = 0;while (count != k-1) {fast = fast.next;if(fast == null) {return -1;}count++;}while (fast.next != null) {fast = fast.next;slow = slow.next;}return slow.val;}

方法2

class Solution {public int kthToLast(ListNode head, int k) {ListNode cur=head;while(k!=0) {if (cur==null) {return -1;}cur=cur.next;k--;}if (k==0) {while(cur!=null) {cur=cur.next;head=head.next;}return head.val;}return -1;}
}

5. 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。OJ

在这里插入图片描述

class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {if(list1==null) {return list2;}if (list2==null) {return list1;}ListNode temp;if(list1.val>list2.val) {temp=list2;list2=list2.next;}else {temp=list1;list1=list1.next;}ListNode head=temp;while(list1!=null&&list2!=null) {if(list1.val>list2.val) {temp.next=list2;list2=list2.next;temp=temp.next;}else {temp.next=list1;list1=list1.next;temp=temp.next;}}if(list1!=null) {temp.next=list1;}if(list2!=null) {temp.next=list2;}return head;} }

6. 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。OJ链接

在这里插入图片描述

public class Partition {public ListNode partition(ListNode pHead, int x) {ListNode cur = pHead;ListNode be = null;ListNode bs = null;ListNode as = null;ListNode ae = null;while (cur != null) {if (cur.val < x) {if (bs == null) {bs = be = cur;} else {be.next = cur;be=be.next;}} else {if (as == null) {as = ae = cur;} else {ae.next = cur;ae=ae.next;}}cur=cur.next;}if(be==null) {return as;}if(ae!=null) {ae.next=null;}be.next = as;return bs;}
}

7. 链表的回文结构。OJ链接

在这里插入图片描述

public class PalindromeList {public boolean chkPalindrome(ListNode head) {ListNode fast=head;ListNode slow=head;while(fast!=null&&fast.next!=null) {slow=slow.next;fast=fast.next.next;}ListNode cur=slow.next;ListNode curN=cur;while(curN!=null) {curN=curN.next;cur.next=slow;slow=cur;cur=curN;}while(slow!=head) {if(head.val!=slow.val) {return false;}if (head.next==slow) {return true;}head=head.next;slow=slow.next;}return true;}
}

8. 输入两个链表,找出它们的第一个公共结点。OJ链接

在这里插入图片描述

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode pl=headA;ListNode ps=headB;int len1=size(pl);int len2=size(ps);int leng=Math.abs(len1-len2);if(len1>len2) {while(leng!=0) {pl=pl.next;leng--;}}else {while (leng !=0) {ps=ps.next;leng--;}}while(ps!=null&&pl!=null) {if(ps==pl) {return ps;}ps=ps.next;pl=pl.next;}return null;}public int size(ListNode head) {int count=0;while (head!=null) {head=head.next;count++;}return count;}
}

9. 给定一个链表,判断链表中是否有环。 OJ链接

在这里插入图片描述

public class Solution {public boolean hasCycle(ListNode head) {if(head==null) {return false;}ListNode fast=head;ListNode slow=head;while(fast!=null&&fast.next!=null) {fast=fast.next.next;slow=slow.next;if(fast==slow) {return true;}  } return false;}
} 

【思路】
快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表
带环则一定会在环中相遇,否则快指针率先走到链表的末尾。比如:陪女朋友到操作跑步减肥。
【扩展问题】
为什么快指针每次走两步,慢指针走一步可以?
假设链表带环,两个指针最后都会进入环,快指针先进环,慢指针后进环。当慢指针刚进环时,可能就和快
指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度。此时,两个指针每移动一次,之间的距离
就缩小一步,不会出现每次刚好是套圈的情况,因此:在慢指针走到一圈之前,快指针肯定是可以追上慢指
针的,即相遇。
快指针一次走3步,走4步,…n步行吗?
在这里插入图片描述
按上面的方法,每次快指针走三步,慢指针走一步,永远不会相遇,因为快指针把慢指针套圈了。
因此只有快指针走2步,慢指针走一步,即使慢指针被套圈,slow和fast也是同一位置。

10. 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL OJ链接

在这里插入图片描述

public class Solution {public ListNode detectCycle(ListNode head) {if(head==null) {return null;}ListNode fast=head;ListNode slow=head;while (fast!=null&&fast.next!=null) {fast=fast.next.next;slow=slow.next;if(slow==fast) {break;}}if(fast==null||fast.next==null) {return null;}fast=head;while (fast!=slow) {fast=fast.next;slow=slow.next;}return fast;}
}

在这里插入图片描述

相关文章:

知识改变命运 数据结构【链表面试题】

1. 删除链表中等于给定值 val 的所有节点。 OJ链接 public ListNode removeElements(ListNode head, int val) {if (headnull) {return null;}ListNode curhead.next;ListNode prehead;while(cur!null) {if(cur.valval) {pre.nextcur.next;curcur.next;}else {precur;curcur.ne…...

计算机毕业设计 医院问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

掌握CSS的:any-link伪类:统一链接样式的高效方法

在网页设计中&#xff0c;链接是用户导航和交互的重要组成部分。CSS提供了多种伪类选择器来定义链接的不同状态&#xff0c;例如:link用于选择未访问的链接&#xff0c;:visited用于选择已访问的链接。然而&#xff0c;有时候我们需要同时为所有状态的链接设置统一的样式&#…...

虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)

虚幻5|在连招基础上&#xff0c;给角色添加武器并添加刀光|在攻击的时候添加武器并返回背后&#xff08;第一部分&#xff0c;下一部分讲刀光&#xff09;_unreal 如何给角色添加攻击-CSDN博客 目的&#xff1a;捡起各种不同的武器&#xff0c;捡起的武器跟装备的武器相匹配 …...

防火墙技术与地址转换

文章目录 前言一、四种区域二、实验拓扑图基础配置防火墙配置测试结果 前言 防火墙是计算机网络中的一种安全设备或软件功能&#xff0c;旨在监控和控制进出网络的网络流量。其核心目的是保护内部网络免受外部攻击或不必要的访问。防火墙通过设定一系列安全规则&#xff0c;允…...

C++11中的Lambda表达式

文章目录 C11中的Lambda表达式1.lambda表达式形式2.向lambda传递参数3.使用捕获列表4.lambda捕获和返回1.值捕获2.引用捕获3.隐式捕获4.可变lambda5.指定lambda的返回类型 C11中的Lambda表达式 1.lambda表达式形式 lambda表达式具有以下形式 [capture list] (parameter list)…...

Unity图形系统

Unity的图形系统是一个复杂且功能强大的模块&#xff0c;它支持多种渲染技术和API&#xff0c;能够满足从移动设备到高端游戏机和桌面平台的各种需求。以下是关于Unity图形系统的详细解析&#xff1a; 渲染流程与技术 Unity的渲染流程可以分为应用程序阶段&#xff08;CPU&…...

Ceph篇之利用shell脚本实现批量创建bucket桶

Ceph创建bucket桶 在 Ceph 中创建桶&#xff08;bucket&#xff09;需要使用 Ceph 对象网关&#xff08;RGW&#xff09;。 注&#xff1a;如果查看shell批量创建脚本请直接参见目录3 1. 利用radosgw-admin工具创建桶 确保 Ceph 集群和对象网关已正确配置 确保你的 Ceph 集群…...

周末总结(2024/08/17)

工作 人际关系核心实践&#xff1a; 要学会随时回应别人的善意&#xff0c;执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己&#xff0c;抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内&#xff0c;职场社交不要放在5min以内 职场的人际关系在面对利…...

SQL高级编程:掌握自定义函数和过程的艺术

标题&#xff1a;SQL高级编程&#xff1a;掌握自定义函数和过程的艺术 在SQL的世界里&#xff0c;数据操作不仅仅局限于简单的查询和更新。通过自定义函数&#xff08;User-Defined Functions, UDFs&#xff09;和存储过程&#xff08;Stored Procedures&#xff09;&#xff…...

python监听环境内是否有声音

python监听环境内是否有声音 首先使用pyaudio打开麦克风&#xff0c;并开始录音。然后使用一个while循环来不断读取麦克风录取的音频数据&#xff0c;然后使用numpy来分析音频数据是否有声音。当检测到有声音时&#xff0c;会打印"有声音"并退出循环。最后关闭录音流…...

合并两个有序链表--力扣

题目如下: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例如下: 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 …...

【自用】Python爬虫学习(三):图片下载、使用代理、防盗链视频下载、多线程与多进程

Python爬虫学习&#xff08;三&#xff09; 使用BeautifulSoup解析网页并下载图片模拟用户登录处理使用代理视频下载&#xff0c;防盗链的处理多线程与多进程 使用BeautifulSoup解析网页并下载图片 目的&#xff1a;对某网站的某个专栏页面的图片进行下载得到高清图。 思路&am…...

#Datawhale AI夏令营第4期#AIGC方向Task3

在之前的任务中&#xff0c;我们已经对baseline进行了精读&#xff0c;并生成了&#xff0c;我们自己的八图故事。 在Task3中&#xff0c;我们的主要任务有两个&#xff1a;part1&#xff1a;工具初探一ComfyUI应用场景探索&#xff1b;Part2&#xff1a;Lora微调。 微调是一…...

【docker综合篇】关于我用docker搭建了6个应用服务的事

最近一直在捣鼓docker&#xff0c;利用测试服务器&#xff0c;本着犯错就重来(重装系统)的大无畏精神&#xff0c;不断尝试&#xff0c;总结经验&#xff0c;然后在网上搜寻一些关于docker有关的服务镜像&#xff0c;并搭建起来。看着一个个服务在我的服务器跑起来&#xff0c;…...

【sgCreateAPIFunction】自定义小工具:敏捷开发→自动化生成API接口方法代码片段脚本(接口方法代码生成工具)

sgCreateAPIFunction源码 <template><!-- 前往https://blog.csdn.net/qq_37860634/article/details/141159084 查看使用说明 --><div :class"$options.name"><div class"sg-head">接口方法生成工具<el-dropdown:show-timeou…...

Vue2图片懒加载(vue-lazyload)

参考文档&#xff1a;vue-lazyload 安装插件 npm install vue-lazyload # or yarn add vue-lazyload # or pnpm add vue-lazyload使用 使用方式 一&#xff1a; 所有懒加载图片的占位图使用同一张默认图片 引入并注册 // main.js import VueLazyload from vue-lazyload Vue…...

Jenkins-拉取代码

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Jenkins环境配置&#xff08;一&#xff09;配置Maven环境&#xff08;1&#xff09;Maven下载&#xff08;2&#xff09;将Maven上传服务器&#xff08;3&…...

深度解析:.secret勒索病毒如何加密你的数据并勒索赎金

引言&#xff1a; 在当今这个数字化、信息化的时代&#xff0c;网络安全已成为一个不容忽视的重要议题。随着互联网的普及和技术的飞速发展&#xff0c;我们的生活、工作乃至整个社会的运转都越来越依赖于各种计算机系统和网络。然而&#xff0c;这种高度依赖也为我们带来了前…...

测试岗位应该学什么

以下是测试岗位需要学习的一些关键内容&#xff1a; 1. 测试理论和方法 - 了解不同类型的测试&#xff0c;如功能测试、性能测试、压力测试、安全测试、兼容性测试等。 - 掌握测试策略和测试计划的制定。 2. 编程语言 - 至少熟悉一种编程语言&#xff0c;如 Python、Java…...

TranslucentTB:轻量任务栏视觉增强工具,让Windows桌面颜值提升300%

TranslucentTB&#xff1a;轻量任务栏视觉增强工具&#xff0c;让Windows桌面颜值提升300% 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB …...

Python 3.13 + CUDA 13.0编译轮子

核心工具链安装 1、安装 Visual Studio 2022 (勾选 “使用 C 的桌面开发”) 2、安装 CUDA Toolkit 13.0环境变量注入 在终端执行&#xff0c;确保编译器能精准定位 CUDA 路径&#xff1a;set CUDA_PATHD:\Program Files\NVIDIA_GPU_Computing_Toolkit\v13 set PATH%CUDA_PATH%\…...

档案宝 档案管理系统怎么样?为什么企业选择他?

在当今信息化高速发展的时代&#xff0c;企业档案管理已经从传统的纸质化时代迈向了数字化、智能化的新阶段。随着企业规模的不断扩大和业务类型的日益复杂&#xff0c;档案管理面临着前所未有的挑战&#xff1a;档案数量激增、查找困难、存储空间紧张、安全隐患突出等问题严重…...

3种方法永久保存QQ空间历史说说:GetQzonehistory实战指南

3种方法永久保存QQ空间历史说说&#xff1a;GetQzonehistory实战指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 为什么需要GetQzonehistory&#xff1a;三个真实场景 想象一下&am…...

3步终结告警疲劳:Keep平台的智能告警管理实践

3步终结告警疲劳&#xff1a;Keep平台的智能告警管理实践 【免费下载链接】keep The open-source alerts management and automation platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 智能告警管理已成为现代运维体系的核心能力。根据Gartner最新报告…...

在给ppt接入扣子空间(Ai)/智能体,新玩法10分钟搞定说课,公开课AI互动!

做 PPT 时&#xff0c;你是否遇到过这些痛点&#xff1a;演讲中观众突然提问&#xff0c;临时组织语言容易逻辑混乱&#xff1b;同一问题被反复询问&#xff0c;浪费演示时间&#xff1b;静态页面无法按需补充细节&#xff0c;信息传递不精准。而扣子空间&#xff08;Coze&…...

别再死记硬背了!用Treap(树堆)搞定LeetCode平衡树难题,附C++完整模板

Treap实战指南&#xff1a;用随机化平衡树高效解决LeetCode难题 1. 为什么选择Treap而非传统平衡树&#xff1f; 在算法竞赛和面试场景中&#xff0c;我们经常需要处理动态有序集合的操作。传统平衡树如AVL和红黑树虽然能保证严格的平衡性&#xff0c;但它们的实现复杂度往往让…...

终极指南:如何解决Cobalt Instagram下载失败问题 - 完整排查方案

终极指南&#xff1a;如何解决Cobalt Instagram下载失败问题 - 完整排查方案 Cobalt是一款强大的开源媒体下载工具&#xff0c;专为保存Instagram、YouTube、Twitter等平台的视频和图片而设计。然而&#xff0c;许多用户在使用Cobalt下载Instagram内容时经常遇到各种失败问题&…...

Windows系统焕新优化:Win11Debloat全方位性能提升指南

Windows系统焕新优化&#xff1a;Win11Debloat全方位性能提升指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和改…...

当分包时,主包里有未被引用的文件,小程序预览【代码质量】显示包体积过大,不影响发布

1.项目加入分包后预览时显示主包体积超出&#xff1f;排查分包没问题&#xff0c;外部库方法也不会占很多空间2.代码依赖分析【显示 - 主包体积正常】主包实际体积&#xff08;768KB&#xff09;明明远小于 2MB 上限&#xff0c;但工具却提示「主包尺寸应小于 1.5M」且未通过。…...