华为od面试手撕代码真题题型4——链表

server/2024/10/22 14:07:38/

链表

1 单链表相交

160. 相交链表 - 力扣(LeetCode)

解法一 指针 pA 指向 A 链表,指针 pB 指向 B 链表,依次往后遍历。如果 pA 到了末尾,则 pA = headB 继续遍历、如果 pB 到了末尾,则 pB = headA 继续遍历。如此 长度差就消除了

java">    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode p = headA;ListNode q = headB;while(p != q){if (p == null) {p = headB;}else{p = p.next;}if (q == null){q = headA;}else{q = q.next;}}return p == null ? null : p;}

解法二 先得到headA,headB的长度,让长的先走长度差的单位,然后再一起走并判断节点是否相同。

java">public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) return null;ListNode p = headA;ListNode q = headB;int lenA = 0;int lenB = 0;//获取链表长度while (p != null){p = p.next;lenA ++;}while (q != null){q = q.next;lenB ++;}//p,q重新指向链表p = headA;q = headB;if (lenA >= lenB){int n = lenA -lenB;while (n -- > 0){ //让p先走n步p = p.next;}}else {int n = lenB -lenA;while (n -- > 0){ //让q先走n步q = q.next;}}//然后一起走while (p != null && q != null){if (p == q) return p;p = p.next;q = q.next;}return null;}

2 判断链表是否有环

思路:双指针

876. 链表的中间结点 - 力扣(LeetCode)

141. 环形链表 - 力扣(LeetCode)

142. 环形链表 II - 力扣(LeetCode)

876 题解

java"> public ListNode middleNode(ListNode head) {ListNode slow = head;ListNode fast = head;//fast != null && fast.next != null 最后slow指的就是中点(偶数的话中偏右)while (fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;}return slow;}

141 题解

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

142题解

java">public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while (fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;if (slow == fast){ //达到相交点后 head到环头的长度等于快慢指针相交点到环头的距离while (head != slow){head = head.next;slow = slow.next;}return slow;}}return null;}

http://www.ppmy.cn/server/133919.html

相关文章

CVTE Android面试题及参考答案(100道题)

目录 插件化 组件化 合并相似接口 抽象通用方法 使用接口代理 引入设计模式 编写源代码 资源文件准备 编译资源文件 编译源代码 生成 dex 文件 打包 APK 文件 技术能力提升 项目经验积累 职业发展 知识分享与团队协作 建立良好的沟通机制 明确团队目标和职责…

大数据新视界 --大数据大厂之大数据与边缘计算的协同:实时分析的新前沿

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

11 django管理系统 - 管理员管理 - 分页复习(REVIEW)

下面实现分页功能,还是按照固定步骤来。 我先随机插入100条数据。然后分页,每页显示10条数据。 分页类:在前面"08 django管理系统 - 部门管理 - 部门分页"讲到过,代码如下: from django.utils.safestring …

如何利用动态IP进行数据采集?

在数据驱动的时代,动态IP成为进行高效数据采集的利器。动态IP可以通过频繁更换IP地址避免因频繁访问而受限,从而实现更顺畅的数据获取。本文将详细探讨如何利用动态IP进行数据采集,为企业提升信息获取能力提供实用指导。 如何利用动态IP进行…

程序员节:代码世界的故事与技术

《程序员节:代码世界的故事与技术》 在这个充满数字与逻辑的世界里,一年一度的程序员节又如约而至。1024 这个特殊的日子,让我们一同回首那些与代码相伴的岁月,分享属于我们的故事,展示我们的技术风采。 作为一名程序…

全面掌握MySQL:从安装到优化的完整指南(适用于Windows系统)

撰写一篇关于MySQL使用的详细博客时,涵盖从安装、配置、基础操作、SQL查询,到高阶功能和性能优化的内容,可以确保达到万字的目标并提供丰富的技术深度。以下是关于在Windows系统上使用MySQL的详细指南,文章分为多个部分&#xff0…

Java八股整合(Kafka+RocketMQ+K8S)

消息队列 用于进程中相互通信的队列 放入消息的是生产者,取出消息的是消费者 应用场景 异步处理,削峰/限流,解耦 用Java模拟消息队列 用一个线程当生产者,当消息队列中消息数小于最大队列容量时向队列中加入消息&#xff0c…

电影评论系统:Spring Boot设计与实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…