题目描述
输入两个链表,找出它们的第一个公共结点。
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null || pHead2==null) return null;
ListNode p = pHead1;
ListNode q = pHead2;
int count1=0;
int count2=0;
while(p!=null || q!=null){
if(p!=null){
count1++;
p = p.next;
}
if(q!=null){
count2++;
q = q.next;
}
}
ListNode p1 = pHead1;
ListNode q1 = pHead2;
int cha = count1-count2;
for(int i=0; i<Math.abs(cha);i++){
if(cha>=0)
p1 = p1.next;
else
q1 = q1.next;
}
while(p1!=null && p1!=q1){
p1 = p1.next;
q1 = q1.next;
}
if(p1==null)
return null;
return p1;
}
}
思路:如何求链表的第一个公共节点,两个链表线分别求每个链表的长度,长的链表先走到和短的链表一样的长度,两个在开始一起走,第一个相同的节点即是公共的节点
其次这里还要注意特殊的示例。包括公共节点是链表的第一个节点,最后一个节点,中间以及链表没有公共节点