题目描述
输入两个链表,找出它们的第一个公共结点。
/**
* 遍历两个链表得到它们的长度
* 第二次遍历,在较长的链表上先走若干步,接着同时在两个链表上遍历
* @param pHead1
* @param pHead2
* @return
*/
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
int len1 = getListLength(pHead1);
int len2 = getListLength(pHead2);
int len = len1 - len2;
ListNode pHeadLong = pHead1;
ListNode pHeadShort = pHead2;
if (len2 > len1) {
pHeadLong = pHead2;
pHeadShort = pHead1;
len = len2 - len1;
}
for (int i = 0; i < len; i++) {
pHeadLong = pHeadLong.next;
}
while (pHeadLong != null && pHeadShort != null) {
if (pHeadLong == pHeadShort) {
break;
}
pHeadLong = pHeadLong.next;
pHeadShort = pHeadShort.next;
}
return pHeadLong;
}
public int getListLength(ListNode head) {
int len = 0;
ListNode ptr = head;
while (ptr != null) {
++len;
ptr = ptr.next;
}
return len;
}