
์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์๋ฅผ ์ฃผ์ด์ง ๊ท์น๋๋ก ์ฌ๋ฐฐ์นํ๋ ๋ฌธ์ ๋ค. ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
[1, 2, 3, 4, 5 ... n-2, n-1, n]์ ์ฌ๋ฐฐ์นํ๋ฉด [1, n, 2, n-1, 3, n-2 ...]์ด ๋๋ค.
์๋ฅผ๋ค์ด [1, 2, 3, 4, 5]๋ฅผ ์ฌ๋ฐฐ์นํ๋ฉด [1, 5, 2, 4, 3]์ด ๋๋ค.

deque
from collections import deque
class Solution:
def reorderList(self, head: Optional[ListNode]) -> None:
deq = deque()
cursor = head
while cursor.next:
deq.append(cursor.next)
cursor = cursor.next
cursor = head
count = 0
while deq:
if count % 2 == 0:
cursor.next = deq.pop()
else:
cursor.next = deq.popleft()
cursor = cursor.next
count += 1
cursor.next = None
deque๋ฅผ ์์ฑํด ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋
ธ๋๋ค์ ์์๋๋ก ์ง์ด๋ฃ๋๋ค.count๋ฅผ ํตํด ๊ฒฝ์ฐ๋ฅผ ๋๋ด๋ค.count๊ฐ ์ง์์ธ ๊ฒฝ์ฐ deque์์ ๊ฐ์ฅ ๋์ ์์๋ฅผ ๊บผ๋ด๊ณ cursor์ ์ฐ๊ฒฐ์ํจ๋ค.count๊ฐ ํ์์ธ ๊ฒฝ์ฐ deque์์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๊บผ๋ด๊ณ cursor์ ์ฐ๊ฒฐ์ํจ๋ค.None์ผ๋ก ์ค์ ํ๋ค.
Runtime์ด ์์ฌ์ ๋ค๋ฅธ ํ์ด๋ฅผ ์ฐพ์๋ณด๋ ์ค ํฌํฌ์ธํฐ๋ฅผ ์ด์ฉํด ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ค๊ฐ ๋
ธ๋๋ฅผ ์ฐพ๊ณ , ๋ ๊ฐ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๋๋ ๋ค ํด๊ฒฐํ๋ ํ์ด๋ฅผ ๋ฐ๊ฒฌํ๋ค.(Leetcode์ Code Sample)
class Solution:
def reorderList(self, head: Optional[ListNode]) -> None:
slow = fast = head
while fast.next and fast.next.next:
slow = slow.next
fast = fast.next.next
second = slow.next
slow.next = None
prev = None
while second:
tmp = second.next
second.next = prev
prev = second
second = tmp
second = prev
first = head
while second:
first_temp = first.next
first.next = second
second_temp = second.next
second.next = first_temp
second = second_temp
first = first_temp
slow, ๋์นธ์ฉ ์ด๋ํ๋ fast ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ์ค๊ฐ ๋
ธ๋๋ฅผ ์ฐพ๋๋ค.first์ ๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ secondsecond๋ฅผ ์ญ์์ผ๋ก ๋ค์ง๋๋ค.first์ second์ ์์๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ด์ผ๋ฉฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ๋ฐฐ์นํ๋ค.
Runtime์ด ์ค์๋ค!
deque์์ ๋
ธ๋๋ฅผ ์ฝ์
/์ญ์ ํ๋ ๊ณผ์ ์ด ์์ด์ ธ์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.