有2个链表,后半部分是相同的,找出他们公共的起点。
解决思路:同时遍历2个链表,当其中一个到达结尾时,将它指向另一个链表的头,继续向后遍历,当2个链表相遇时,就是他们公共部分的起点。
public Node getpbulicnode(List a,List b){
//如果其中一个链表为空,直接返回空
if(a == null || b == null){
return null;
}
Node ha = a;
Node hb = b;
//从头开始遍历2个链表,直到2个节点相同
while(ha != hb){
ha = ha.next;
hb = hb.next;
//如果a链表已经遍历到结尾,则开始从b链表头向后遍历
if(ha == null){
ha = b;
}
//如果b链表已经遍历到结尾,则开始从a链表头向后遍历
if(hb == null){
hb = a;
}
}
//返回他们相遇的节点,就是公共部分的起点
return ha;
}