import java.util.*; /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { //先计算两个链表的长度 int n = 0, m = 0; ListNode tmpNode = pHead1; while (tmpNode != null) { n++; tmpNode = tmpNode.next; } tmpNode = pHead2; while (tmpNode != null) { m++; tmpNode = tmpNode.next; } ListNode fastNode, slowNode; if (n > m) { fastNode = pHead1; slowNode = pHead2; } else { fastNode = pHead2; slowNode = pHead1; } int step = (n > m) ? n - m : m - n; for (int i = 0; i < step; i++) { fastNode = fastNode.next; } while (fastNode != null) { if (fastNode == slowNode) return fastNode; fastNode = fastNode.next; slowNode = slowNode.next; } return fastNode; } }
先求出链表的长度,然后求出两个链表长度之差。再使用快慢指针,快指针比慢指针快的步数就是这个差值。