Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6a2134e

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /