您的位置:首页 > Web前端

剑指offer 两个链表的第一个公共结点

2016-04-27 10:14 393 查看
题目描述

输入两个链表,找出它们的第一个公共结点。

/**
* 遍历两个链表得到它们的长度
* 第二次遍历,在较长的链表上先走若干步,接着同时在两个链表上遍历
* @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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表