forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEgonD3V.py
71 lines (58 loc) ยท 2.12 KB
/
EgonD3V.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from heapq import heappush, heappop
from typing import List, Optional
from unittest import TestCase, main
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reorderList(self, head: Optional[ListNode]) -> None:
return self.solve(head)
"""
Runtime: 15 ms (Beats 88.30%)
Time Complexity: O(n)
- ์ญ๋ฐฉํฅ ๋งํฌ๋ ๋ฆฌ์คํธ์ธ backward๋ฅผ ์์ฑํ๋๋ฐ, ์๋ณธ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ชจ๋ ๋
ธ๋๋ฅผ ์กฐํํ๋๋ฐ O(n)
- reorderํ๋๋ฐ ์๋ณธ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ชจ๋ ๋
ธ๋์ ๊ธธ์ด๋งํผ backward์ forward์ ๋
ธ๋๋ค์ ์กฐํํ๋๋ฐ O(n)
> O(n) + O(n) = 2 * O(n) ~= O(n)
Memory: 23.20 MB (Beats 88.27%)
Space Complexity: O(n)
> ์ญ๋ฐฉํฅ ๋งํฌ๋ ๋ฆฌ์คํธ์ธ backward๋ฅผ ์์ฑํ๋๋ฐ, backward์ ๊ธธ์ด๋ ์๋ณธ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด์ ๊ฐ์ผ๋ฏ๋ก O(n)
"""
def solve(self, head: Optional[ListNode]) -> None:
backward = ListNode(head.val)
backward_node = head.next
length = 1
while backward_node:
length += 1
temp_node = ListNode(backward_node.val)
temp_node.next = backward
backward = temp_node
backward_node = backward_node.next
node = head
forward = head.next
for i in range(length):
if i == length - 1:
node.next = None
return
if i % 2 == 0:
node.next = backward
backward = backward.next
node = node.next
else:
node.next = forward
forward = forward.next
node = node.next
class _LeetCodeTestCases(TestCase):
def test_1(self):
node_1 = ListNode(1)
node_2 = ListNode(2)
node_3 = ListNode(3)
node_4 = ListNode(4)
node_5 = ListNode(5)
node_1.next = node_2
node_2.next = node_3
node_3.next = node_4
node_4.next = node_5
self.assertEqual(Solution().reorderList(node_1), True)
if __name__ == '__main__':
main()