1721. Swapping Nodes in a Linked List [leetcode] | ๊ฐ์ด ์๋ ๊ฐ์ฒด(๋ ธ๋)๋ฅผ ์ง์ ๊ตํ ํด๋ณด๊ธฐ
https://leetcode.com/problems/swapping-nodes-in-a-linked-list/description/
๋ฌธ์ ๋ ์ ๋งํฌ ์ฐธ์กฐ
ํด๋น ๋ฌธ์ ๋ฅผ ์ฒ์ ์ ๊ทผ ํ์ ๋ ๊ฐ์ฒด๋ฅผ ๊ตํํ๋ ๊ฒ์ ๋๋ฌด ๋ณต์กํด ๋ณด์ฌ ๊ฐ๋ง ๊ตํํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
์ดํ ์ง์ ๊ฐ์ฒด๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ ํ์ตํด๋ณด์๋ค.
ํ์ด ์์ฝ
1. ์์ง ์ผ์ด์ค ์ฒ๋ฆฌ: ๋ฆฌ์คํธ๊ฐ ๋น์ด์๊ฑฐ๋ ํ๋์ ๋ ธ๋๋ง ์๋ ๊ฒฝ์ฐ ๊ทธ๋๋ก ๋ฐํ
2. dummy ๋ ธ๋๋ฅผ ์์ฑํ์ฌ head ๋ ธ๋ ๊ตํ์ ์ฒ๋ฆฌ
3. 4๊ฐ์ ํฌ์ธํฐ ์ฌ์ฉ : prevFirst, first, prevSecond, second (๊ฐ๊ฐ ๊ตํํ ๋ ๋ ธ๋์ ๊ทธ ์ง์ ๋ ธ๋๋ค์ ๊ฐ๋ฆฌํจ๋ค.)
4. ์์์ k๋ฒ์งธ ๋ ธ๋(first)์ ์ง์ ๋ ธ๋(prevFirst) ์ฐพ๊ธฐ
5. ๋ค์์ k๋ฒ์งธ ๋ ธ๋(second)์ ์ง์ ๋ ธ๋(prevSecond) ์ฐพ๊ธฐ (fast ํฌ์ธํฐ ์ฌ์ฉ)
6. ๋ ๋ ธ๋๊ฐ ๊ฐ์ ๊ฒฝ์ฐ(k๊ฐ ๋ฆฌ์คํธ ๊ธธ์ด์ ์ ๋ฐ์ผ ๋) ๋ณ๊ฒฝ์ด ํ์ ์์ผ๋ฏ๋ก head ๋ฐํ
1. ์์ง ์ผ์ด์ค ์ฒ๋ฆฌ
if (head == null || head.next == null) return head;
2. dummy ๋ ธ๋๋ฅผ ์์ฑํ์ฌ head ๋ ธ๋ ๊ตํ์ ์ฒ๋ฆฌ
3. 4๊ฐ์ ํฌ์ธํฐ ์ฌ์ฉ: prevFirst, first, prevSecond, second (๊ฐ๊ฐ ๊ตํํ ๋ ๋ ธ๋์ ๊ทธ ์ง์ ๋ ธ๋๋ค์ ๊ฐ๋ฆฌํจ๋ค.)
4. ์์์ k๋ฒ์งธ ๋ ธ๋(first)์ ์ง์ ๋ ธ๋(prevFirst) ์ฐพ๊ธฐ
fast ํฌ์ธํฐ๊ฐ ๋ค์์ k ๋ฒ์งธ ๋ ธ๋๋ฅผ ์ฐพ๋ ๊ฒ์ ๋์์ค๋ค.
fast.next์ second์ ๊ฐ๊ฒฉ์ด k, ๊ทธ๋ฆผ์์์๋ ๊ฐ๊ฒฉ 2์ธ ๊ฒ์ ์ ์ ์๋ค.
5. ๋ค์์ k๋ฒ์งธ ๋ ธ๋(second)์ ์ง์ ๋ ธ๋(prevSecond) ์ฐพ๊ธฐ (fast ํฌ์ธํฐ ์ฌ์ฉ)
6. first์ second ๋ ธ๋๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ตํํ ํ์ ์์ด head ๋ฐํ
if (first == second) return head;
1~6. ๊น์ง์ ๊ณผ์ ์ ํตํด ์, ๋ค์์ ๊ฐ๊ฐ k๋ฒ์งธ์ธ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์์๋ค. ์ด์ first, second ๋ ธ๋์ swap์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
๋ ธ๋ ๊ตํ
7.
prevFirst.next๋ฅผ second๋ก ์ค์
prevSecond.next๋ฅผ first๋ก ์ค์
8.first์ second์ next ํฌ์ธํฐ๋ฅผ ๊ตํ
๊ตํ์ด ์๋ฃ๋ ํ ๋ง์ง๋ง์ผ๋ก dummy.next๋ฅผ ๋ฐํํ๋ฉด ๋๋ค.
์ฃผ์ : dummy.next๊ฐ ์๋ head๋ฅผ ๋ฐํํ๋ฉด ์ผ๋ถ ํ ์คํธ ์ผ์ด์ค์ ์คํจํ๋ค.
Input
head = [1,2] k = 1
Output (์ค๋ต)
[1]
Expected
[2,1]
์คํจ ์์ธ
head ๋ ธ๋ ๊ตํ ๋ฌธ์
๋ง์ฝ k๊ฐ 1์ด๊ฑฐ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด์ ๊ฐ์ ๊ฒฝ์ฐ, head ๋ ธ๋๊ฐ ๊ตํ๋์ด์ผ ํ๋๋ฐ head๋ฅผ ์ง์ ๋ฐํํ๋ฉด, head ๋ ธ๋๊ฐ ๊ตํ๋ ๊ฒฝ์ฐ์๋ ์๋์ head๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๋ค.
์ด๊ธฐ ์ํ: dummy -> 1 -> 2 head = 1
๋ ธ๋ ๊ตํ ํ: dummy -> 2 -> 1
head๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ
head๋ ์ฌ์ ํ ๊ฐ์ด 1์ธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๊ฒฐ๊ณผ: [1] (์ค๋ต)