java如何实现相交链表
发表于:2025-11-21 作者:千家信息网编辑
千家信息网最后更新 2025年11月21日,这篇文章主要为大家展示了"java如何实现相交链表",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java如何实现相交链表"这篇文章吧。1.题目相交链表:给
千家信息网最后更新 2025年11月21日java如何实现相交链表
这篇文章主要为大家展示了"java如何实现相交链表",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java如何实现相交链表"这篇文章吧。
1.题目
相交链表:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。相交链表
2.分析
相交链表是Y字型,next域相同。
定义两个引用pl和ps,
如果每个链表相交结点前长度相同,一步一步走,直到相同就找到了相交结点。如果长度不一样,首先要长链表先走差值步,然后再一人走一步直到相遇
长度不同:
长度相同:
首先求长度,先假设pl指向headA:
ListNode pl = headA; ListNode ps = headB; int lenA = 0; int lenB = 0; while (pl != null) { lenA++; pl = pl.next; } //pl==null; pl = headA; while (ps != null) { lenB++; ps = ps.next; } //ps==null; ps = headB;然后根据长度差值的正负判断谁长,将pl指向长的链表:
int len = lenA - lenB;//差值步 if (len < 0) { pl = headB; ps = headA; len = lenB - lenA; }然后长的先走长度差值步,最后一人一步走:
//pl走差值len步 while (len != 0) { pl = pl.next; len--; } //同时走,直到相遇 while (pl != ps) { pl = pl.next; ps = ps.next; } return pl; }3.完整代码
//判断链表相交 public static ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) { return null; } ListNode pl = headA; ListNode ps = headB; int lenA = 0; int lenB = 0; while (pl != null) { lenA++; pl = pl.next; } //pl==null; pl = headA; while (ps != null) { lenB++; ps = ps.next; } //ps==null; ps = headB; int len = lenA - lenB;//差值步 if (len < 0) { pl = headB; ps = headA; len = lenB - lenA; } //1、pl永远指向最长的链表 ps永远指向最短的链表 2、求到了差值len步 //pl走差值len步 while (len != 0) { pl = pl.next; len--; } //同时走,直到相遇 while (pl != ps) { pl = pl.next; ps = ps.next; } return pl; }测试:
public static void main(String[] args) { MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addLast(12); myLinkedList.addLast(23); myLinkedList.addLast(34); myLinkedList.addLast(45); System.out.println("myLinkedList:"); myLinkedList.display(); MyLinkedList myLinkedList1 = new MyLinkedList(); myLinkedList1.addLast(13); myLinkedList1.addLast(22); myLinkedList1.addLast(30); System.out.println("myLinkedList1:"); myLinkedList1.display(); createCut(myLinkedList.head, myLinkedList1.head); try { ListNode ret = getIntersectionNode(myLinkedList.head, myLinkedList1.head); myLinkedList.display2(ret); } catch (NullPointerException e) { e.printStackTrace(); System.out.println("没有相交结点!"); } }MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addLast(12); myLinkedList.addLast(23); myLinkedList.addLast(34); myLinkedList.addLast(56); System.out.println("myLinkedList:"); myLinkedList.display(); MyLinkedList myLinkedList1 = new MyLinkedList(); myLinkedList1.addLast(12); myLinkedList1.addLast(23); myLinkedList1.addLast(30); System.out.println("myLinkedList1:"); myLinkedList1.display(); //createCut(myLinkedList.head,myLinkedList1.head); try { ListNode ret = getIntersectionNode(myLinkedList.head, myLinkedList1.head); System.out.println(ret.val); }catch (NullPointerException e){ e.printStackTrace(); System.out.println("不存在相交结点!"); } }
以上是"java如何实现相交链表"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
差值
长度
相同
两个
指向
结点
内容
篇文章
同时
节点
一人
学习
帮助
不同
最长
交点
代码
字型
易懂
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
三亚微商直播软件开发
给孩子上dna数据库
试述dna数据库的缺陷
360dns服务器很差怎么解决
户口已落户数据库没有个人信息
用友有自己的数据库
戴尔dns服务器怎么解决
波音公司是网络安全公司吗
网络安全的动漫
软件开发违约处理
网络安全优盾的形状
服务器灾备预案怎么写
数据库的套接字是什么意思
安徽党员教育软件开发公司
福州计算机三级网络技术辅导
教育软件开发市场前景
安徽中宾网络技术有限公司
ftp服务器匿名登录
大专计算机软件开发
如何盗取公司系统数据库
崇明区信息软件开发教育
常用的论文索引数据库
传奇私服 数据库 错误
灌云进口网络技术排名靠前
网络安全黎佳
迅腾网络安全儿童画
检查服务器响应异常
高青资产软件开发公司
北京安防卫星授时服务器虚拟主机
如何改变服务器登录地址