两个链表的第一个公共节点

143 阅读1分钟

原题链接

image.png

//假设 相交长度为c, headA 和 headB 不相交的长度分别为 a ,b
//@change处,满足cur为空时交换链表继续往前
//如果相交:走的路程为 a + c + b = b + c + a ,正好在相交处满足cur1 === cur2 退出while
//如果没有相交:即 c = 0 ;走的路程为 a + b = b + a ,正好相互交换后走到cur1、cur2均为nil,满足cur1 === cur2 退出while

func getIntersectionNode(_ headA:ListNode?, _ headB:ListNode?) ->ListNode? {
    var cur1 = headA
    var cur2 = headB
    while cur1 !== cur2 {
        //@change
        cur1 = (cur1 != nil) ? cur1?.next : headB
        cur2 = (cur2 != nil) ? cur2?.next : headA
    }
    return cur1
}