diff --git "a/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/README.md" "b/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/README.md" index 9f0560bf463b7..6a59138109f8d 100644 --- "a/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/README.md" +++ "b/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/README.md" @@ -289,6 +289,58 @@ public class Solution { } ``` +#### Swift + +```swift +/* public class Node: Hashable { +* public var val: Int +* public var next: Node? +* public var random: Node? + +* public init(_ val: Int) { +* self.val = val +* self.next = nil +* self.random = nil +* } + +* public static func == (lhs: Node, rhs: Node) -> Bool { +* return lhs === rhs +* } + +* public func hash(into hasher: inout Hasher) { +* hasher.combine(ObjectIdentifier(self)) +* } +* } +*/ + +class Solution { + func copyRandomList(_ head: Node?) -> Node? { + var d = [Node: Node]() + let dummy = Node(0) + var tail: Node? = dummy + var cur = head + + while cur != nil { + tail?.next = Node(cur!.val) + tail = tail?.next + d[cur!] = tail + cur = cur?.next + } + + tail = dummy.next + cur = head + + while cur != nil { + tail?.random = d[cur!.random ?? Node(0)] + tail = tail?.next + cur = cur?.next + } + + return dummy.next + } +} +``` + diff --git "a/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/Solution.swift" "b/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/Solution.swift" new file mode 100644 index 0000000000000..9e48d0f745324 --- /dev/null +++ "b/lcof/\351\235\242\350\257\225\351\242\23035. \345\244\215\346\235\202\351\223\276\350\241\250\347\232\204\345\244\215\345\210\266/Solution.swift" @@ -0,0 +1,47 @@ +/* public class Node: Hashable { +* public var val: Int +* public var next: Node? +* public var random: Node? + +* public init(_ val: Int) { +* self.val = val +* self.next = nil +* self.random = nil +* } + +* public static func == (lhs: Node, rhs: Node) -> Bool { +* return lhs === rhs +* } + +* public func hash(into hasher: inout Hasher) { +* hasher.combine(ObjectIdentifier(self)) +* } +* } +*/ + +class Solution { + func copyRandomList(_ head: Node?) -> Node? { + var d = [Node: Node]() + let dummy = Node(0) + var tail: Node? = dummy + var cur = head + + while cur != nil { + tail?.next = Node(cur!.val) + tail = tail?.next + d[cur!] = tail + cur = cur?.next + } + + tail = dummy.next + cur = head + + while cur != nil { + tail?.random = d[cur!.random ?? Node(0)] + tail = tail?.next + cur = cur?.next + } + + return dummy.next + } +} \ No newline at end of file