From b80c96299f9ab401df4318d989c8b16722243a9d Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Tue, 4 Jun 2024 07:53:33 +0100 Subject: [PATCH] feat: add swift implementation to lcof2 problem: No.028 --- .../README.md" | 48 +++++++++++++++++++ .../Solution.swift" | 43 +++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 "lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/Solution.swift" diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/README.md" index 19759fc442666..2be6abf311439 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/README.md" @@ -244,6 +244,54 @@ public: }; ``` +#### Swift + +```swift +/* class Node { +* var val: Int +* var prev: Node? +* var next: Node? +* var child: Node? + +* init(_ val: Int) { +* self.val = val +* self.prev = nil +* self.next = nil +* self.child = nil +* } +* } +*/ + +class Solution { + private var dummy = Node(0) + private var tail: Node? + + func flatten(_ head: Node?) -> Node? { + guard let head = head else { + return nil + } + tail = dummy + preOrder(head) + dummy.next?.prev = nil + return dummy.next + } + + private func preOrder(_ node: Node?) { + guard let node = node else { + return + } + let next = node.next + let child = node.child + tail?.next = node + node.prev = tail + tail = node + node.child = nil + preOrder(child) + preOrder(next) + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/Solution.swift" new file mode 100644 index 0000000000000..710a1f3a4e2f1 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 028. \345\261\225\345\271\263\345\244\232\347\272\247\345\217\214\345\220\221\351\223\276\350\241\250/Solution.swift" @@ -0,0 +1,43 @@ +/* class Node { +* var val: Int +* var prev: Node? +* var next: Node? +* var child: Node? + +* init(_ val: Int) { +* self.val = val +* self.prev = nil +* self.next = nil +* self.child = nil +* } +* } +*/ + +class Solution { + private var dummy = Node(0) + private var tail: Node? + + func flatten(_ head: Node?) -> Node? { + guard let head = head else { + return nil + } + tail = dummy + preOrder(head) + dummy.next?.prev = nil + return dummy.next + } + + private func preOrder(_ node: Node?) { + guard let node = node else { + return + } + let next = node.next + let child = node.child + tail?.next = node + node.prev = tail + tail = node + node.child = nil + preOrder(child) + preOrder(next) + } +} \ No newline at end of file