输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:
在节点 c1 开始相交。
双指针法
因为两个链表的长度不相等吗,互相走完第一遍之后,换成从对方的头开始走,这样第二遍的时候大家就都是同步的了,到最后如果没找到就会都变成nil,满足了循环的退出条件
func getIntersectionNode(headA, headB *ListNode) *ListNode {
if headA==nil || headB==nil{
return nil
}
ptra,ptrb := headA,headB
for ptra!=ptrb{
if ptra!=nil{
ptra=ptra.Next
}else{
ptra=headB
}
if ptrb!=nil{
ptrb=ptrb.Next
}else{
ptrb=headA
}
}
return ptra
}