/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { /** * 解题思路:公共结点后面的链表是一致的。 * 所区别点在于公共结点之前的链表长度,如果长度相同,那可以走到同一个结点。问题在于公共结点前的链表长度不一致的情况,比如长度差异k * 这里将短链表走到尾之后,指向长链表,这样就可以在长链表走到尾之前先走k步 * 而长链表走到尾之后,将其指向锻炼表,这样两者在抵达公共结点前的长度就一致了。 **/ public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if(pHead1 == null || pHead2 == null) { return null; } ListNode node1 = pHead1; ListNode node2 = pHead2; while(node1 != node2) { node1 = node1.next; node2 = node2.next; if(node1 == node2) { break; } //让更短的链表走到尾后切换为更长的链表先走 if(node1 == null) { node1 = pHead2; } if(node2 == null) { node2 = pHead1; } } return node1; } }