File tree Expand file tree Collapse file tree 2 files changed +91
-0
lines changed
lcof2/剑指 Offer II 028. 展平多级双向链表 Expand file tree Collapse file tree 2 files changed +91
-0
lines changed Original file line number Diff line number Diff line change @@ -244,6 +244,54 @@ public:
244
244
};
245
245
```
246
246
247
+ #### Swift
248
+
249
+ ``` swift
250
+ /* class Node {
251
+ * var val: Int
252
+ * var prev: Node?
253
+ * var next: Node?
254
+ * var child: Node?
255
+
256
+ * init(_ val: Int) {
257
+ * self.val = val
258
+ * self.prev = nil
259
+ * self.next = nil
260
+ * self.child = nil
261
+ * }
262
+ * }
263
+ */
264
+
265
+ class Solution {
266
+ private var dummy = Node (0 )
267
+ private var tail: Node?
268
+
269
+ func flatten (_ head : Node? ) -> Node? {
270
+ guard let head = head else {
271
+ return nil
272
+ }
273
+ tail = dummy
274
+ preOrder (head)
275
+ dummy.next ? .prev = nil
276
+ return dummy.next
277
+ }
278
+
279
+ private func preOrder (_ node : Node? ) {
280
+ guard let node = node else {
281
+ return
282
+ }
283
+ let next = node.next
284
+ let child = node.child
285
+ tail? .next = node
286
+ node.prev = tail
287
+ tail = node
288
+ node.child = nil
289
+ preOrder (child)
290
+ preOrder (next)
291
+ }
292
+ }
293
+ ```
294
+
247
295
<!-- tabs:end -->
248
296
249
297
<!-- solution:end -->
Original file line number Diff line number Diff line change
1
+ /* class Node {
2
+ * var val: Int
3
+ * var prev: Node?
4
+ * var next: Node?
5
+ * var child: Node?
6
+
7
+ * init(_ val: Int) {
8
+ * self.val = val
9
+ * self.prev = nil
10
+ * self.next = nil
11
+ * self.child = nil
12
+ * }
13
+ * }
14
+ */
15
+
16
+ class Solution {
17
+ private var dummy = Node ( 0 )
18
+ private var tail : Node ?
19
+
20
+ func flatten( _ head: Node ? ) -> Node ? {
21
+ guard let head = head else {
22
+ return nil
23
+ }
24
+ tail = dummy
25
+ preOrder ( head)
26
+ dummy. next? . prev = nil
27
+ return dummy. next
28
+ }
29
+
30
+ private func preOrder( _ node: Node ? ) {
31
+ guard let node = node else {
32
+ return
33
+ }
34
+ let next = node. next
35
+ let child = node. child
36
+ tail? . next = node
37
+ node. prev = tail
38
+ tail = node
39
+ node. child = nil
40
+ preOrder ( child)
41
+ preOrder ( next)
42
+ }
43
+ }
You can’t perform that action at this time.
0 commit comments