LeetCode相交链表Swift

编写一个程序,找到两个单链表相交的起始节点。

如下面的两个链表:

示例 1:

  

输出:2

示例 2:

 

输出:null

注意:

如果两个链表没有交点,返回 null.
在返回结果后,两个链表仍须保持原有的结构。
可假定整个链表结构中没有循环。
程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。

思路:

A链表:链表A + 链表B  09124324

B链表:链表B + 链表A  32409124

路程相同,速度相同,如果有交点,最后肯定相遇走相同的路,上面最后的24就是相同的路

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public var val: Int
 *     public var next: ListNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.next = nil
 *     }
 * }
 */

class Solution {
    func getIntersectionNode(_ headA: ListNode?, _ headB: ListNode?) -> ListNode? {
        var currentA = headA
        var currentB = headB
        while currentA !== currentB {
            if currentA?.next == nil && currentB?.next == nil {
                return nil
            }
            currentA = (currentA?.next == nil) ? headB : currentA?.next
            currentB = (currentB?.next == nil) ? headA : currentB?.next
        }
        return currentA
    }
}
原文地址:https://www.cnblogs.com/huangzs/p/14155716.html