判断两个链表是否存在交点 并求出位置
来源:互联网 发布:起名软件免费 编辑:程序博客网 时间:2024/05/19 03:18
private static class Node {private int value;private Node next;public Node(int value) {this.value = value;}//省略get set}
public static Node checkNodeIntersect(Node node1, Node node2) {if (node1 == null && node2 == null) {return null;}int n1Num = 0;int n2Num = 0;int subTract = 0;Node n1 = node1;Node n2 = node2;int diff = 0;// 分别得到两段链表长度 得到最后一个节点while (n1.next != null) {n1Num++;n1 = n1.next;}while (n2.next != null) {n2Num++;n2 = n2.next;}// 如果最后的一个节点不相同 则返回nullif (n1 != n2) {return null;}// 得到两个链表的差diff = Math.abs(n1Num - n2Num);// 比较两段链表的长度,长的为n1 短的为n2if (n1Num > n2Num) {n1 = node1;n2 = node2;} else {n1 = node2;n2 = node1;}// 把长的一段移动diff位置 使得与另一段链表相等起始位置for (int i = 0; i < diff; i++) {n1 = n1.next;}// 遍历到n1 == n2时(比较地址)结束遍历while (n1 != n2) {n1 = n1.next;n2 = n2.next;}// 返回相交节点return n1;}
测试:
public static void main(String[] args) {Node node1 = new Node(1);node1.next = new Node(2);Node diff = new Node(3);node1.next.next = diff;Node node2 = new Node(11);node2.next = new Node(22);node2.next.next = diff;System.out.println(checkNodeIntersect(node1, node2).getValue());}
先将两段链表长度相减 长度长的那一个链表移动相减的长度 然后再遍历比较 最后得到相交的节点
网上的拓展还有很多情况,比如链表成环,等等。。
0 0
- 判断两个链表是否存在交点 并求出位置
- 【链表】判断两个链表是否相交,并求出交点
- 判断两个单向链表是否相交,并求出交点(要求O(1)的额外空间)
- 判断线段是否相交...并求出交点。
- 判断两链表是否相交,并求出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点-笔记
- 判断两个链表是否相交并找出交点
- 判断两个链表是否相交并找出交点
- C:\Users\Fan\.eclipse\...\configuration could not be created. Please choose a writable locati
- 什么是智慧
- char二维数组按行输入
- 轻松突破,二分查找
- js中的原型链
- 判断两个链表是否存在交点 并求出位置
- Django在网页显示本地静态资源
- gradle编译启动项目时报错Could not find tools.jar
- iOS本地化学习小结
- 向Retrofit打响第一炮
- 《ACM程序设计》书中题目U(美丽数字)
- 二叉树的遍历算法实现、以及所有简单操作
- MVPExample--Android MVP开发见解
- 安装和使用Karma-Jasmine进行自动化测试