Skip to content

Commit 0608217

Browse files
committed
feat: solve #247 with python
1 parent 97a0c14 commit 0608217

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

reorder-list/EGON.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
from heapq import heappush, heappop
2+
from typing import List, Optional
3+
from unittest import TestCase, main
4+
5+
6+
class ListNode:
7+
def __init__(self, val=0, next=None):
8+
self.val = val
9+
self.next = next
10+
11+
12+
class Solution:
13+
def reorderList(self, head: Optional[ListNode]) -> None:
14+
return self.solve(head)
15+
16+
"""
17+
Runtime: 15 ms (Beats 88.30%)
18+
Time Complexity: O(n)
19+
- 역방향 링크드 리스트인 backward를 생성하는데, 원본 링크드 리스트의 모든 노드를 조회하는데 O(n)
20+
- reorder하는데 원본 링크드 리스트의 모든 노드의 길이만큼 backward와 forward의 노드들을 조회하는데 O(n)
21+
> O(n) + O(n) = 2 * O(n) ~= O(n)
22+
23+
Memory: 23.20 MB (Beats 88.27%)
24+
Space Complexity: O(n)
25+
> 역방향 링크드 리스트인 backward를 생성하는데, backward의 길이는 원본 링크드 리스트의 길이와 같으므로 O(n)
26+
"""
27+
def solve(self, head: Optional[ListNode]) -> None:
28+
backward = ListNode(head.val)
29+
backward_node = head.next
30+
length = 1
31+
while backward_node:
32+
length += 1
33+
temp_node = ListNode(backward_node.val)
34+
temp_node.next = backward
35+
backward = temp_node
36+
backward_node = backward_node.next
37+
38+
node = head
39+
forward = head.next
40+
for i in range(length):
41+
if i == length - 1:
42+
node.next = None
43+
return
44+
45+
if i % 2 == 0:
46+
node.next = backward
47+
backward = backward.next
48+
node = node.next
49+
else:
50+
node.next = forward
51+
forward = forward.next
52+
node = node.next
53+
54+
55+
class _LeetCodeTestCases(TestCase):
56+
def test_1(self):
57+
node_1 = ListNode(1)
58+
node_2 = ListNode(2)
59+
node_3 = ListNode(3)
60+
node_4 = ListNode(4)
61+
node_5 = ListNode(5)
62+
node_1.next = node_2
63+
node_2.next = node_3
64+
node_3.next = node_4
65+
node_4.next = node_5
66+
67+
self.assertEqual(Solution().reorderList(node_1), True)
68+
69+
70+
if __name__ == '__main__':
71+
main()

0 commit comments

Comments
 (0)