题目:
输入两个链表,找出它们的第一个公共结点。
思路:首先分别求两个链表的长度,然后做差值,判断哪个链表的长度长,就将其头指针向后移动两链表差值的长度,此时两个链表的头指针都指向了同样的位置,接下来判断两个头指针所指位置的元素是否相等,若不相等,都同时向后移动指针,直到找到相交的公共节点为止。
/*
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 length1 = 0;
int length2 = 0;
ListNode list1 = pHead1;
ListNode list2 = pHead2;
while(list1 != null){
length1 ++;
list1 = list1.next;
}
while(list2 != null){
length2 ++;
list2 = list2.next;
}
list1 = pHead1;
list2 = pHead2;
int L = Math.abs(length1-length2);
if(length1>length2){
for(int i = 0;i<L;i++){
list1 = list1.next;
}
}
else
{
for(int i = 0;i<L;i++){
list2 = list2.next;
}
}
while(list1 != list2){
list1 = list1.next;
list2 = list2.next;
}
return list1;
}
}