-
728x90๋ฐ์ํ
๊ฐ์ ๋ ์ง: 11/18/2021
์์ฒญ ๊ฐ์: ์๊ทผํ ์ด๋ ค์ด ์๋ฃ๊ตฌ์กฐ : ๋งํฌ๋ ๋ฆฌ์คํธLinkedList
์ ์
์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List)๋ก ๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด์๋ ๋ฐฉ์์ ์๋ฃ ๊ตฌ์กฐ.
- ๋งํฌ๋ ๋ฆฌ์คํธ๋ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๋ฐ ์์ ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํด์ผ ํ๋ค → ์๊ฐ ๋ณต์ก๋ : O(1)
- ํน์ ์์น(index)๋ก ์ฝ์ /์ญ์ /ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ๋ O(n) ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์, ํ์์ ์์ฃผํด์ผ ํ๋ค๋ฉด ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ , ๋ฐ์ดํฐ์ ์ถ๊ฐ/์ญ์ ๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
singly linked list ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์๋ค.
๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ (Singly Linked List)
๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ์ ์์๋ฅผ ์ ํ์ ์ผ๋ก ์ฐ๊ฒฐํ ๊ฒ์ด๋ค.
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ: ํ๋์ ๋ ธ๋์ ํ ๊ฐ์ ํฌ์ธํฐ์ ๋ฐ์ดํฐ ๊ฐ์ด ์ ์ฅ๋๋ค
- ๋ฉ๋ชจ๋ฆฌ์ ๋์คํฌ์ ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ ๋นํด์ผ ํ๋ ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅด๊ฒ, ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์ฌํ ๋นํ๊ฑฐ๋ ์ฌ๊ตฌ์ฑํ์ง ์๊ณ ๋ ํน์ ์ง์ ์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ด์ ์ ๋ฆฌํ๋ค.
- ํฌ์ธํฐ๋ก ๋ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ง์ ํ๋ค. ์ฆ, ๋ฐฐ์ด๋ณด๋ค ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํน์ ๋ฆฌ์คํธ ๊ฐ์ ํ์ธํ๊ธฐ ์ํด์ ๋ฆฌ์คํธ ์์ ํญ๋ชฉ์ ์์ฐจ์ ์ผ๋ก ์ํํด์ผ ํ๋ค.
๊ตฌํ
๊ธฐ๋ณธ ๊ตฌ์กฐ
class LinkedList { Node head; class Node { int data; Node next; Node(int d) { data = d; } //next ๋ null ๋ก ์ด๊ธฐํ } }
๋งจ ์์ ๋ ธ๋ ์ถ๊ฐ
// ๋งจ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋ : ์๋ก์ด ํด๋ ์์ฑ public void push(int new_data) { Node new_node = new Node(new_data); new_node.next = 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 _4(์ถ๊ฐ)_ 2 3 : 1์ด 2๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์๋ค๋ฉด, 4๊ฐ 2๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํด์ค๋ค new_node.next = prev_node.next; //๋ ธ๋์ ํฌ์ธํฐ๊ฐ ์ด์ ๋ ธ๋๊ฐ ๊ฐ๋ฆฌํค๋ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒํ๋ค //ex: 1 _4(์ถ๊ฐ)_2 3 : 1์ ๊ธฐ์กด์ 2๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์์ง๋ง, 4๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ณ๊ฒฝํ๋ค prev_node.next = new_node; //์ด์ ๋ ธ๋์ ํฌ์ธํฐ๊ฐ ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค }
๋งจ ๋ค์ ์๋ก์ด ๋ ธ๋ ์ถ๊ฐ
//๋งจ ๋ค์ ์ถ๊ฐ public void append(int new_data) { Node new_node = new Node(new_data); Node last = head; //while ์์ ์ฐ์ : ํ์ฌ์ head๋ฅผ ์ง์ if (head == null) //๋ฆฌ์คํธ๊ฐ ๋น์ด์๋ค๋ฉด ์ถ๊ฐํ๋ ค๋ ๋ ธ๋๊ฐ ํค๋๊ฐ ๋๋ค { head = new Node(new_data); return; } new_node.next = null; //๋ ธ๋๋ฅผ ๋งจ ๋ง์ง๋ง์ ์ถ๊ฐํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ํฌ์ธํฐ๋ null์ ๊ฐ๋ฆฌํค๊ฒ ํด์ค๋ค //else ๋ฌธ ๋ถ๋ถ while (last.next != null) //ํค๋๊ฐ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค๋ฉด last = last.next; //last(์ฒ์์ head๋ก ์ด๊ธฐํ)๋ฅผ ๋ค์ ๋ ธ๋๋ก ์ค์ ->iterate ํ๋ค last.next = new_node; //๋ง์ง๋ง ๋ ธ๋๊ฐ ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํด์ค๋ค return; //free the memory }
๋ ธ๋ ์ญ์
//์ฃผ์ด์ง key๋ฅผ ์ญ์ void deleteNode(int key) { Node temp = head, prev = null; //head ์ ์ฅ if (temp != null && temp.data == key) { //๋ ธ๋๊ฐ head๊ณ head ๋ค์๊ฐ์ด ์กด์ฌํ ๋ head = temp.next; // ํค๋๋ฅผ ๋ค์ ๊ฐ์ผ๋ก ๊ต์ฒดํ๋ค return; } while (temp != null && temp.data != key) { //iterate prev = temp; temp = temp.next; } if (temp == null) //๋ฆฌ์คํธ์ ์ฃผ์ด์ง key๊ฐ ์๋ค -> escape return; // ex: 1 2 3(์ญ์ ) 4 : 2์ ํฌ์ธํฐ๋ฅผ 3์ด ๊ธฐ์กด์ ๊ฐ๋ฆฌํค๋ 4๋ฅผ ๊ฐ๋ฆฌํค๊ฒํ๋ค prev.next = temp.next; //์ด์ ๋ ธ๋์ ํฌ์ธํฐ๊ฐ ์ญ์ ํ ํฌ์ธํฐ์ ๋ค์๊ฐ์ ๊ฐ๋ฆฌํค๊ฒํ๋ค }
์ ์ฝ๋์์ ์ญ์ ํ ๋ ธ๋๊ฐ ํค๋์ผ ๊ฒฝ์ฐ ์ค๋ช :
if (temp != null && temp.data == key) { //๋ ธ๋๊ฐ head๊ณ head ๋ค์๊ฐ์ด ์กด์ฌํ ๋ head = temp.next; // ํค๋๋ฅผ ๋ค์ ๊ฐ์ผ๋ก ๊ต์ฒดํ๋ค return; }
ํค๋๊ฐ ์๋ ๋ถ๋ถ - while loop ๊ตฌํ ์ค๋ช :
while (temp != null && temp.data != key) { //iterate prev = temp; temp = temp.next; } if (temp == null) //๋ฆฌ์คํธ์ ์ฃผ์ด์ง key๊ฐ ์๋ค -> escape return; // ex: 1 2 3(์ญ์ ) 4 : 2์ ํฌ์ธํฐ๋ฅผ 3์ด ๊ธฐ์กด์ ๊ฐ๋ฆฌํค๋ 4๋ฅผ ๊ฐ๋ฆฌํค๊ฒํ๋ค prev.next = temp.next;
source code reference: Geeks for Geeks - Linkedlist
ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ๋ฐ๋ก๊ฐ๊ธฐ๐ https://bit.ly/3FVdhDa
์๊ฐ๋ฃ 100% ํ๊ธ ์ฑ๋ฆฐ์ง | ํจ์คํธ์บ ํผ์ค
๋ฑ 5์ผ๊ฐ ์งํ๋๋ ํ๊ธ์ฑ๋ฆฐ์ง๋ก ์๊ฐ๋ฃ 100% ํ๊ธ๋ฐ์ผ์ธ์! ๋ ๋ฆ๊ธฐ์ ์ ์๊ธฐ๊ณ๋ฐ ๋ง์ฐจ ํ์น!
fastcampus.co.kr
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
728x90๋ฐ์ํ'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 20์ผ์ฐจ (0) 2021.11.20 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 19์ผ์ฐจ (0) 2021.11.19 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 17์ผ์ฐจ (0) 2021.11.17 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 16์ผ์ฐจ (1) 2021.11.16 ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 15์ผ์ฐจ (0) 2021.11.15 ๋๊ธ