package JianZhioffer; //当count=2时,实际上保证了双链表指针最后同时到达终点。但是如果到达终点都没有指到同一个结点,说明并没有相交结点。此时R与L都再次指向另外一个链表后count = 4,所以回返回null。 //当指针按照题解方式走下去,p1第二次走到公共节点的时候,走过的长度为LA + C + LB,p2第二次走到公共节点的时候,走过的长度为LB + C + LA。p1 p2走过的长度相等,p1 p2 相遇。 //输入两个链表,找出它们的第一个公共节点。 public class test52 { public static void main(String[] args) { ListNode l1=new ListNode(4); l1.next=new ListNode(1); l1.next.next=new ListNode(8); l1.next.next.next=new ListNode(4); l1.next.next.next.next=new ListNode(5); ListNode l2=new ListNode(5); l2.next=new ListNode(0); l2.next.next=new ListNode(1); l2.next.next.next=new ListNode(8); l2.next.next.next.next=new ListNode(4); l2.next.next.next.next.next=new ListNode(5); ListNode result=getIntersectionNode(l1, l2); int x=0; } public static ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) return null; ListNode L = headA; ListNode R = headB; int count=0; //当一个节点达到一个链表的尾部,则从另一个链表继续,同时count++ while (L != R) { L = L.next; R = R.next; if (L == null) { L = headB; count ++; } if (R == null) { R = headA; count++; } if (count >2) { return null; } } return L; } }