题目描述:给你两个链表,找出他们第一个公共节点
思路: 公共节点就是 一样 的两个节点,若这两个节点一样,那么这个节点之后的节点也都一样。但两个链表的长度谁长谁短不知道,所以应该先判断长短,让后让长的链表走一个长短差对齐尾部,因为如果有公共节点,那么公共节点到尾巴的所有节点都一样。 所以可以从这个点相互比较,第一个一样的节点就是答案
java程序:
/*
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 len1 = GetLen(pHead1);
int len2 = GetLen(pHead2);
if(len1>len2){
pHead1 = Walk(pHead1,len1-len2);
}else{
pHead2 = Walk(pHead2,len2-len1);
}
while(pHead1!=null && pHead2!=null){
if(pHead1.val==pHead2.val)
return pHead1;
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return null;
}
public int GetLen(ListNode p){
int count = 0;
while(p!=null){
count++;
p=p.next;
}
return count;
}
public ListNode Walk(ListNode p,int k){
while(k>0){
p=p.next;
k--;
}
return p;
}
}