-
728x90๋ฐ์ํ
๊ฐ์ ๋ ์ง: 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
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
728x90๋ฐ์ํ'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 21์ผ์ฐจ (0) 2021.11.21 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 20์ผ์ฐจ (0) 2021.11.20 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 18์ผ์ฐจ (0) 2021.11.18 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 17์ผ์ฐจ (0) 2021.11.17 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 16์ผ์ฐจ (0) 2021.11.16 ๋๊ธ