java如何实现相交链表
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"java如何实现相交链表",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java如何实现相交链表"这篇文章吧。1.题目相交链表:给
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
咖啡
手冲咖啡和咖啡机区别
互联网科技名片
互联网核心科技是什么
美国互联网科技巨头监管
互联网 科技
平安科技 互联网
碳银互联网科技
南京欣网互联网科技
重庆科技学院互联网
卫星互联网科技股票
中国科技创新与世界互联网大会
互联网公司黑科技创始人
科技大学互联网
互联网科技圈年度人物
上海同邻互联网科技有限公司规模
互联网领先科技活动
互联网科技收购价值
北京天晋互联网科技有限公司
互联网科技职业技能培训学校
广州百单互联网科技有限公司
新华互联网科技学校
互联网 卓越科技
甘肃拓世互联网科技有限公司
特约风豹互联网科技为什么扣费
互联网企业科技类企业如何做账
有人说阿里系是互联网科技企业
好易买互联网科技
杭州融税互联网科技有限公司
恒生互联网科技趋势