编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
示例 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 } }