Skip to content

Commit ebdc39c

Browse files
committed
- Reorder List #247
1 parent 93773ff commit ebdc39c

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

reorder-list/ayosecu.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
from typing import Optional
2+
from collections import deque
3+
4+
class ListNode:
5+
def __init__(self, val=0, next=None):
6+
self.val = val
7+
self.next = next
8+
9+
class Solution:
10+
"""
11+
- Time Complexity: O(N), N = The number of nodes.
12+
- Space Complexity: O(N)
13+
"""
14+
def reorderList(self, head: Optional[ListNode]) -> None:
15+
dq = deque()
16+
17+
cur = head
18+
while cur:
19+
dq.append(cur)
20+
cur = cur.next
21+
22+
dummy = ListNode(-1)
23+
cur = dummy
24+
flag = True
25+
while dq:
26+
if flag:
27+
cur.next = dq.popleft()
28+
else:
29+
cur.next = dq.pop()
30+
cur = cur.next
31+
flag = not flag
32+
cur.next = None
33+
34+
return dummy.next
35+
36+
### TC Helpers ###
37+
def build_linked_list(values):
38+
dummy = ListNode(0)
39+
current = dummy
40+
for v in values:
41+
current.next = ListNode(v)
42+
current = current.next
43+
return dummy.next
44+
45+
def linked_list_to_list(head):
46+
result = []
47+
while head:
48+
result.append(head.val)
49+
head = head.next
50+
return result
51+
52+
### TC ###
53+
tc = [
54+
([1,2,3,4], [1,4,2,3]),
55+
([1,2,3,4,5], [1,5,2,4,3])
56+
]
57+
58+
sol = Solution()
59+
for i, (l, e) in enumerate(tc, 1):
60+
r = linked_list_to_list(sol.reorderList(build_linked_list(l)))
61+
print(f"TC {i} is Passed!" if r == e else f"TC {i} is Failed! - Expected: {e}, Result: {r}")

0 commit comments

Comments
 (0)