Swift - LeetCode - 相交链表

作者: 依赖糊涂 | 来源:发表于2019-03-13 22:26 被阅读8次

    题目

    相交链表

    问题:

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

    示例:

    例如,下面的两个链表:
         
      A:               a1 → a2
                                     ↘
                                       c1 → c2 → c3
                                    ↗
      B:     b1 → b2 → b3
         
       在节点 c1 开始相交。
    
    

    说明:

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

    解题思路:

    把a、b链表弄成等长,然后一起遍历,最先相等的结点就是交点。

    代码:
    /**
    public class SingNode {
        public var value : Int
        public var nextNode: SingNode?
        
        public init(value:Int) {
            self.value = value
        }
    }
    
    extension SingNode : CustomStringConvertible {
        public var description: String {
            var string = "\(value)"
            var node = self.nextNode
            
            while node != nil {
                string = string + " -- " + "\(node!.value)"
                node = node?.nextNode
            }
            return string
        }
    }
    
        func findNodeLength(_ l1 :SingNode?) -> Int {
            var len = 0
            var next = l1
            while next != nil {
                next = next?.nextNode
                len = len + 1
            }
            return len
        }
     **/
          
       func getIntersectionNode(_ l1 :SingNode?, _ l2:SingNode?) -> SingNode? {
            var len1 = findNodeLength(l1)
            var len2 = findNodeLength(l2)
            
            var head1 = l1
            var head2 = l2
            
            while len1 < len2 {
                head2 = head2?.nextNode
                len2 = len2 - 1
            }
            
            while len1 > len2 {
                head1 = head1?.nextNode
                len1 = len1 - 1
            }
            
            while head1 != head2 {
                head1 = head1?.nextNode
                head2 = head2?.nextNode
            }
            return head1
        }
        
    

    相关文章

      网友评论

        本文标题:Swift - LeetCode - 相交链表

        本文链接:https://www.haomeiwen.com/subject/kfbxmqtx.html