首页 > 代码库 > 【算法导论学习-23】两个单链表(single linked)求交点
【算法导论学习-23】两个单链表(single linked)求交点
问题:A、B两个单链表如果有交点,返回第一个交点在A中的位置(链表头结点位置为0)。
分析:A、B如果有交点,交点的后继一定也是交点,所以一定是Y型相交,所以算法的思想如下
1) 求得A、B的长度,比如ALength,Blength
2) 判断ALength,Blength谁大,比如Alength>Blength
3) Alength移动到Alength-Blength的位置,开始判断每个节点是否相等,相等则退出。
以本博客中“【算法导论学习-20】单链表(single linked)的实现”为单链表类,Java实现:
/*返回结点在A链表中的位置,注意,链表首结点位置为0*/ public static Integer getPositionofFirstIntersectionNode(SinglyLinkedList<Integer> A,SinglyLinkedList<Integer> B) { int lenghtofA=A.getLength(); int lengthofB=B.getLength(); int counter=-1; /*获得头指针*/ Node<Integer> nodeofA=A.getPreHead(); Node<Integer> nodedofB=B.getPreHead(); /*将两个链表对齐*/ if (lenghtofA!=lengthofB) { while (lenghtofA>lengthofB) { nodeofA= nodeofA.getNext(); lenghtofA--; counter++; } while (lenghtofA<lengthofB) { nodedofB=nodedofB.getNext(); lenghtofA--; } } /*对齐后判断每个结点是否相等*/ while (nodeofA!=null&&nodedofB!=null) { if (nodeofA.equals(nodedofB)) { break; }else { nodeofA= nodeofA.getNext(); nodedofB=nodedofB.getNext(); counter++; } } return counter; }
******************************************************************
测试:public static void main(String[] args) { // TODO 自动生成的方法存根 SinglyLinkedList<Integer> singlyLinkedListA = new SinglyLinkedList<>(); SinglyLinkedList<Integer> singlyLinkedListB = new SinglyLinkedList<>(); Node<Integer> node1=new Node<Integer>(-1); Node<Integer> node2=new Node<Integer>(1); Node<Integer> node3=new Node<Integer>(2); Node<Integer> node4=new Node<Integer>(0); Node<Integer> node5=new Node<Integer>(3); Node<Integer> node6=new Node<Integer>(4); Node<Integer> node7=new Node<Integer>(5); singlyLinkedListA.add(node1); singlyLinkedListA.add(node2); singlyLinkedListA.add(node3); singlyLinkedListA.add(node5); singlyLinkedListA.add(node6); singlyLinkedListA.add(node7); singlyLinkedListB.add(node4); singlyLinkedListB.add(node5); singlyLinkedListB.add(node6); singlyLinkedListB.add(node7); int positon=getPositionofFirstIntersectionNode(singlyLinkedListA, singlyLinkedListB); System.out.println(positon); }
【算法导论学习-23】两个单链表(single linked)求交点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。