题目:输入两个链表,找出他们的第一个公共节点。
分析:我们可以先遍历一次得到他们的长度,计算他们的差值diffNode,让长的链表先走diffNode个节点,然后一起向后走,直到他们第一个相同的节点,就是我们要找的节点。
public FindEntranceOfListNode.ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
int length1=getLength(pHead1);
int length2=getLength(pHead2);
int diffLength=Math.abs(length1-length2);
ListNode shortListNode=length1<length2?pHead1:pHead2;
ListNode longListNode=length1<length2?pHead2:pHead1;
//长的链表先走diffLength个节点
for(int i=0;i<diffLength;i++){
longListNode=longListNode.next;
}
//找到第一个相同的节点
while(longListNode!=null&&shortListNode!=null&&shortListNode.val!=longListNode.val){
longListNode=longListNode.next;
shortListNode=shortListNode.next;
}
return longListNode;
}
public int getLength(ListNode node){
int length=0;
ListNode head=node;
while(node!=null){
length++;
node=node.next;
}
return length;
}