- ์ฐ๊ฒฐ๋ฆฌ์คํธ: ์ฐจ๋ก๋ก ์ฐ๊ฒฐ๋ ๋
ธ๋๋ฅผ ํํํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ
- ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ: ๊ฐ ๋ ธ๋๋ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ: ๊ฐ ๋ ธ๋๋ ๋ค์ ๋ ธ๋์ ์ด์ ๋ ธ๋๋ฅผ ํจ๊ป ๊ฐ๋ฆฌํจ๋ค.
- ๋จ์ : ๋ฐฐ์ด๊ณผ๋ ๋ฌ๋ฆฌ ํน์ ์ธ๋ฑ์ค๋ฅผ ์์ ์๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
- ์ฅ์ : ๋ฆฌ์คํธ์ ์์ ์ง์ ์ ์์ดํ ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ์ฐ์ฐ์ ์์ ์๊ฐ์ ํ ์ ์๋ค.
-
์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ
class Node { Node next; int data; public Node(int data) { this.data = data; } void appendToTail(int d) { Node end = new Node(d); Node n = this; while (n.next != null) { n = n.next; } n.next = end; } }
- ๋จ๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ
- ๋
ธ๋
n
์ด ์ฃผ์ด์ง๋ฉด, ๊ทธ ์ด์ ๋ ธ๋prev
๋ฅผ ์ฐพ์prev.next
๋ฅผn.next
์ ๊ฐ๋๋ก ์ค์ ํ๋ค.
- ๋
ธ๋
- ์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ
n.next
๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ฅผ ๊ฐฑ์ ํ์ฌn.next.prev
๊ฐn.prev
์ ๊ฐ๋๋ก ์ค์ ํด์ผ ํ๋ค.- ์ฃผ์์ฌํญ
- ๋ ํฌ์ธํฐ ๊ฒ์ฌ๋ฅผ ๋ฐ๋์ ํด์ผ ํ๋ค.
- ํ์ํ๋ฉด
head
์tail
ํฌ์ธํฐ๋ ๊ฐฑ์ ํด์ผ ํ๋ค.
Node deleteNode(Node head, int d) {
Node n = head;
if (n.data == d) {
return head.next; // head๋ฅผ ์์ง์ธ๋ค.
}
while (n.next != null) {
if (n.next.data == d) {
n.next = n.next.next;
return head; // head๋ ๋ณํ์ง ์๋๋ค.
}
n = n.next;
}
return head;
}
- Runner(๋ถ๊ฐ ํฌ์ธํฐ)
- ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ฌธ์ ์์ ๋ง์ด ํ์ฉ๋๋ ๊ธฐ๋ฒ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ํํ ๋ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ๋์์ ์ฌ์ฉํ๋ค. ์ด๋ ํ ํฌ์ธํฐ๊ฐ ๋ค๋ฅธ ํฌ์ธํฐ๋ณด๋ค ์์๋๋ก ํ๋ค. ์์ ํฌ์ธํฐ๊ฐ ๋ฐ๋ผ์ค๋ ํฌ์ธํฐ๋ณด๋ค ํญ์ ์ง์ ๋ ๊ฐ์๋งํผ์ ์์๋๋ก ํ ์๋ ์๊ณ , ์๋๋ฉด ๋ฐ๋ผ์ค๋ ํฌ์ธํฐ๋ฅผ ์ฌ๋ฌ ๋ ธ๋๋ฅผ ํ ๋ฒ์ ๋ฐ์ด๋๋๋ก ์ค์ ํ ์๋ ์๋ค.
- ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ด๋ จ ๋ฌธ์ ๊ฐ์ด๋ฐ ์๋น์๋ ์ฌ๊ท ํธ์ถ์ ์์กดํ๋ค.
- ํ์ง๋ง ์ฌ๊ท ํธ์ถ ๊น์ด๊ฐ n์ด ๋ ๊ฒฝ์ฐ, ํด๋น ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ด๋ O(n) ๋งํผ์ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํ์.
- ์ค๋ณต ์์ ๊ธฐ
- ๋ค์์ k๋ฒ์งธ ์์ ๊ตฌํ๊ธฐ
- ์ค๊ฐ ๋ ธ๋ ์ญ์
- ๋ถํ
- ๋ฆฌ์คํธ์ ํฉ
- ํ๋ฌธ
- ๊ต์งํฉ
- ๋ฃจํ ๋ฐ๊ฒฌ