java如何实现相交链表
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这篇文章主要为大家展示了"java如何实现相交链表",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java如何实现相交链表"这篇文章吧。1.题目相交链表:给
千家信息网最后更新 2025年01月28日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安全错误
数据库的锁怎样保障安全
服务器udp多线程
漫的科技软件开发
软件开发需要准备什么东西
中国网络安全工程师报名条件
小公司要做服务器吗
公共网络安全形势分析
娜娜网络技术服务
数据库和数据库营销
苹果浏览器服务器建立安全连接
虚拟服务器安装centos7
修复数据库表
做财务用什么软件开发
首都360网络安全吗
腾讯云服务器网络连接
佟年唱网络安全大赛主题曲
贴心服务器室温馨图
华仔网络安全
建邺区的app软件开发
评价当前网络技术带来的影响
甘肃财务软件开发
网络技术共享的缺点
厦门二手服务器回收
ftp服务器登入
超微服务器CPU报错
医院网络技术设计方案
网络安全板块怎么拉升
龙岗网站建设服务器
多媒体数据库论文中英文
思度软件开发
下面哪种模型是软件开发模型