public static Node getFirstCommonNode(Node head1, Node head2) {
		if (head1 == null || head2 == null) {
			return null;
		}
		int len1 = 1;
		Node tail1 = head1;
		while (tail1.next != null) {
			tail1 = tail1.next;
			len1++;
		}

		int len2 = 1;
		Node tail2 = head2;
		while (tail2.next != null) {
			tail2 = tail2.next;
			len2++;
		}

		// 不相交直接返回NULL
		if (tail1 != tail2) {
			return null;
		}

		Node n1 = head1;
		Node n2 = head2;

		// 略过较长链表多余的部分
		if (len1 > len2) {
			int k = len1 - len2;
			while (k != 0) {
				n1 = n1.next;
				k--;
			}
		} else {
			int k = len2 - len1;
			while (k != 0) {
				n2 = n2.next;
				k--;
			}
		}

		// 一起向后遍历，直到找到交点
		while (n1 != n2) {
			n1 = n1.next;
			n2 = n2.next;
		}

		return n1;
	}