Skip to content

Commit 6a2134e

Browse files
authored
feat: add swift implementation to lcof2 problem: No.028 (#3027)
1 parent b2fc67f commit 6a2134e

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

lcof2/剑指 Offer II 028. 展平多级双向链表/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,54 @@ public:
244244
};
245245
```
246246

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+
247295
<!-- tabs:end -->
248296

249297
<!-- solution:end -->
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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+
}

0 commit comments

Comments
 (0)