双指针:
三种情况:(总长度分别为m,n)
1、存在公共节点:A链表未相交部分为a,相交部分为c
B链表未相交部分为b,相交部分为c
当指针Aa或者指针Bb为null(也就是走到链表的尾部)的时候,重新指向另外一条链表的头节点继续走。
那么两个指针走到公共点的长度是a+c+b和b+c+a,长度一样,得出公共节点
2、不存在公共节点(m!=n):
当指针Aa或者Bb为null的时候,重新指向另外一条链表的头节点继续走。
那么最终会同时为null:两个指针走的长度:m+n和n+m;
3,不存在公共节点(m=n)
那么最终会同时为null:两个指针走的长度:m=n
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1==null||pHead2==null){ return null; } ListNode node1 = pHead1; ListNode node2 = pHead2; //如果同时出现null,符合2,3种情况 while(node1!=null||node2!=null){ if(node1==null){ node1 = pHead2; } else if(node2==null){ node2=pHead1; } //第一种情况 if(node1==node2){ return node1; } node1=node1.next; node2=node2.next; } return node1; }