
๊ฐ์ ๋ ์ง: 11/19/2021
์์ฒญ ๊ฐ์: ์๊ทผํ ์ด๋ ค์ด ์๋ฃ๊ตฌ์กฐ : ๋งํฌ๋ ๋ฆฌ์คํธ(2)
์ค๋ ๊ฐ์์์๋ ์ด์ ์ ๋ฆฌํด๋์ ๋งํฌ๋ ๋ฆฌ์คํธ ๊ตฌํํ๊ธฐ์ ๋ํ ๋ด์ฉ์ด์๋ค. ์ด๋ฏธ ์ด์ ์ ๋ฆฌํ๊ณ , ๋ด์ฉ์ด ๋ง์ด ๋ถ์กฑํ ๊ฒ ๊ฐ์ ์ด์ค ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ํด ์ ๋ฆฌํ๊ฒ ๋ค.
Doubly LinkedList (์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ)
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํ๋์ ๋ ธ๋์ ๋ ๊ฐ์ ๋งํฌ๊ฐ ์กด์ฌํ๋ค.
- ๊ฐ ๋ ธ๋๋ ์ด์ ๋ ธ๋์ ์ฐธ์กฐ ๋งํฌ์, ๋ค์ ๋ ธ๋์ ์ฐธ์กฐ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค
- ์ ์ฒด ๋ ธ๋๋ฅผ ์ํํด์ผ ์ด์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์๋ ๋ค๋ฅด๊ฒ, ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ด์ ๋ ธ๋์ ๋งํฌ๋ฅผ ํตํด O(1)์ ์๊ฐ ๋ณต์ก๋๋ก ์ด์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์๋ค
- ๋ ธ๋์ ์ถ๊ฐ์ ์ ๊ฑฐ๊ฐ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ณด๋ค ๋ง์ ์์ ์ ํด์ผ ํ๋ค
- ์์ ์ด ๋ ๋จ์ํ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ ํจ์จ์ ์ด๋ค
๊ตฌํ
์๋ ์ฝ๋๋ ์์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ - head, next, previous links๋ฅผ ํํํ ์ฝ๋์ด๋ค
๋ ธ๋ ํํ
public class DLL {
Node head; // head of list
/* Doubly Linked list Node*/
class Node {
int data;
Node prev;
Node next;
Node(int d) { data = d; } //next ์ prev ์ null๋ก ์ด๊ธฐํ๋๋ค
}
}
๋งจ ์์ ๋ ธ๋ ์ถ๊ฐ
// ๋งจ ์์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋
public void push(int new_data)
{
Node new_Node = new Node(new_data);
/*์๋ก ์ถ๊ฐํ๋ ค๋ ๋
ธ๋์ ๋ค์ ํฌ์ธํฐ๋ฅผ ๊ธฐ์กด์ head๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ง๋ค๊ณ
*์ด์ ํฌ์ธํฐ๋ Null ๋ก ๋ง๋ ๋ค-> ์ฆ ์๊ธฐ์์ ์ head๋ก ๋ง๋๋ ๊ฒ*/
new_Node.next = head;
new_Node.prev = null;
/* ๊ธฐ์กด Head์ ์ด์ ์ฐธ์กฐ๊ฐ์ด ์๋ก ์์ฑํ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค*/
if (head != null)
head.prev = new_Node;
/* Head๊ฐ ์๋ก ์์ฑ๋ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค */
head = new_Node;
}
ํน์ ๋ ธ๋ ๋ค์ ์๋ก์ด ๋ ธ๋ ์ถ๊ฐ
//์ฃผ์ด์ง ๋
ธ๋ ๋ค์ ์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ตฌํ์ด๋ค
//์ด์ ๋
ธ๋๊ฐ ๋น์ด์์ผ๋ฉด ์ถ๊ฐํ ์ ์๋ค
public void InsertAfter(Node prev_Node, int new_data)
{
if (prev_Node == null) {
System.out.println("The given previous node cannot be NULL ");
return;
}
//์์ฑ ๊ฐ๋ฅํ ์์น
Node new_node = new Node(new_data);
/* ์ถ๊ฐ๋๊ธฐ ์ ์ ๋
ธ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ค์ ๊ฐ์ ์ถ๊ฐํ๋ ค๋ ๋
ธ๋์ ๋ค์๊ฐ์ผ๋ก ์ธํ
ํ๋ค
* ex: 1 2 3 ___ 4 : ๋น์นธ์ ๋
ธ๋๋ฅผ ๋ฃ์ผ๋ ค๋ฉด, ์๋๋ 3์ด 4๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์์ง๋ง
* ๋น์นธ์ ๋ค์ด๊ฐ ๋
ธ๋๊ฐ 4๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ง์ ํด์ผ ํ๋ค */
new_node.next = prev_Node.next;
/* ์ฃผ์ด์ง ๋
ธ๋์ ๋ค์ ์ฐธ์กฐ ํฌ์ธํฐ๊ฐ ์๋ก ์ถ๊ฐํ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค
* ex: 1 2 3 ___ 4 : 3์ ๋น์นธ(์๋ก์ถ๊ฐํ๋ ค๋๋
ธ๋)์ ๊ฐ๋ฅด์ผ์ผํ๋ค*/
prev_Node.next = new_node;
/* ์ถ๊ฐํ ๋
ธ๋์ ์ด์ ์ฐธ์กฐ ํฌ์ธํฐ๋ ์์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํ๋ค
* ex: 1 2 3 ___ 4: ์๋ก ์ถ๊ฐํ ๋
ธ๋์ ์ด์ ์ฐธ์กฐํฌ์ธํฐ๋ 3์ ๊ฐ๋ฆฌ์ผ์ผํ๋ค */
new_node.prev = prev_Node;
/*์ถ๊ฐํ ๋
ธ๋์ ๋ค์ ๋
ธ๋์ ์ด์ ์ฐธ์กฐ ํฌ์ธํฐ๊ฐ ์๋ก ์ถ๊ฐ๋ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒํ๋ค */
if (new_node.next != null)
new_node.next.prev = new_node;
}
๋งจ ๋ค์ ์๋ก์ด ๋ ธ๋ ์ถ๊ฐ
//๋งจ ๋ค์ ๋
ธ๋ ์์ฑ
void append(int new_data)
{
Node new_node = new Node(new_data); //์ ๋
ธ๋
Node last = head; //while ๋ฃจํ ์์์ ์ฐ์
// ์ ๋
ธ๋๋ ๋ง์ง๋ง์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ค์ ์ฐธ์กฐ๊ฐ์ null์ ๊ฐ์ง๋ค
new_node.next = null;
// ๋ฆฌ์คํธ๊ฐ ๋น์ด์๋ค๋ฉด, ์๋ก ์ถ๊ฐํ๋ ค๋ ๋
ธ๋๋ ํค๋๊ฐ ๋๋ค
if (head == null) {
new_node.prev = null;
head = new_node;
return;
}
// ๋ง์ง๋ง ๋
ธ๋๊น์ง ์ํํ๋ค
while (last.next != null) //์๋ ํด๋์ ๋ค์ ์ฐธ์กฐ๊ฐ์ด ์กด์ฌํ๋ฉด
last = last.next; //๊ทธ ๋ค์ ๋
ธ๋๋ฅผ ํ์ธํ๋ค -> ์๋ ๋ฆฌ์คํธ์ ๊ฐ์ฅ ๋ง์ง๋ง ์์ ํ์ธ
// ๊ธฐ์กด ๋ฆฌ์คํธ์ ๊ฐ์ฅ ๋ง์ง๋ง ๋
ธ๋์ next pointer ๋ฅผ ์๋ก ์ถ๊ฐํ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒํ๋ค
last.next = new_node;
// ์๋ก ์ถ๊ฐํ ๋
ธ๋์ ์ด์ ๊ฐ์ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ง์ง๋ง์ ๊ฐ๋ฆฌํจ๋ค
new_node.prev = last;
###๋ ธ๋ ์ญ์
//๋
ธ๋ ์ญ์
void deleteNode(Node del)
{ // Base case: head ๋ ์ญ์ ํ๋ ค๋ ๋
ธ๋๊ฐ null์ด๋ฉด ๋ฉ์ถค
if (head == null || del == null) {
return;
}
// ์ง์ฐ๋ ค๋ ๋
ธ๋๊ฐ head ๋
ธ๋์ผ ๋:
if (head == del) {
head = del.next; //์๋ก์ด ํด๋๋ฅผ ๊ธฐ์กด์ ์ง์ฐ๋ ค๋ ํค๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ค์ ๋
ธ๋๋ก ์ง์
}
//ex: 3 2 1(del) 5 -> 1์ 2๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋๋ฐ, 5๊ฐ 1์ ๊ฐ๋ฆฌํค๋๋ก ํด์ค๋ค
if (del.next != null) {//์ญ์ ํ๋ ค๋ ๋
ธ๋๊ฐ ๋ง์ง๋ง ๋
ธ๋๊ฐ ์๋๋ผ๋ฉด
del.next.prev = del.prev; //์ญ์ ํ๋ ค๋ ๋
ธ๋์ ์ด์ ์ฐธ์กฐ๊ฐ์ด ์ญ์ ํ๋ ค๋ ๋
ธ๋์ ์ด์ ํ์๊ฐ์ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค
}
//ex : 3 2 1(del) 5 -> 2๊ฐ 5๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํด๋๋ค
if (del.prev != null) { //์ญ์ ํ๋ ค๋ ๋
ธ๋๊ฐ ํค๋๊ฐ ์๋๋ผ๋ฉด
del.prev.next = del.next; //์ญ์ ํ๋ ค๋ ๋
ธ๋์ ์ด์ ๋
ธ๋๊ฐ ์ญ์ ํ๋ ค๋ ๋
ธ๋์ ๋ค์๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค
}
return; //free the memory
}
code reference : Geeks for Geeks
ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ๋ฐ๋ก๊ฐ๊ธฐ๐ https://bit.ly/3FVdhDa
์๊ฐ๋ฃ 100% ํ๊ธ ์ฑ๋ฆฐ์ง | ํจ์คํธ์บ ํผ์ค
๋ฑ 5์ผ๊ฐ ์งํ๋๋ ํ๊ธ์ฑ๋ฆฐ์ง๋ก ์๊ฐ๋ฃ 100% ํ๊ธ๋ฐ์ผ์ธ์! ๋ ๋ฆ๊ธฐ์ ์ ์๊ธฐ๊ณ๋ฐ ๋ง์ฐจ ํ์น!
fastcampus.co.kr
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 21์ผ์ฐจ (0) | 2021.11.21 |
|---|---|
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 20์ผ์ฐจ (0) | 2021.11.20 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 18์ผ์ฐจ (0) | 2021.11.18 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 17์ผ์ฐจ (1) | 2021.11.17 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 16์ผ์ฐจ (1) | 2021.11.16 |