์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์๋ฅผ ์ฃผ์ด์ง ๊ท์น๋๋ก ์ฌ๋ฐฐ์นํ๋ ๋ฌธ์ ๋ค. ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
[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
์ ๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ second
second
๋ฅผ ์ญ์์ผ๋ก ๋ค์ง๋๋ค.first
์ second
์ ์์๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ด์ผ๋ฉฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ๋ฐฐ์นํ๋ค.Runtime์ด ์ค์๋ค!
deque
์์ ๋
ธ๋๋ฅผ ์ฝ์
/์ญ์ ํ๋ ๊ณผ์ ์ด ์์ด์ ธ์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.