
๊ฐ์ ๋ ์ง: 11/18/2021
์์ฒญ ๊ฐ์: ์๊ทผํ ์ด๋ ค์ด ์๋ฃ๊ตฌ์กฐ : ๋งํฌ๋ ๋ฆฌ์คํธ
LinkedList
์ ์
์ฐ๊ฒฐ ๋ฆฌ์คํธ (Linked List)๋ก ๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด์๋ ๋ฐฉ์์ ์๋ฃ ๊ตฌ์กฐ.
- ๋งํฌ๋ ๋ฆฌ์คํธ๋ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๋ฐ ์์ ์ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํด์ผ ํ๋ค → ์๊ฐ ๋ณต์ก๋ : O(1)
- ํน์ ์์น(index)๋ก ์ฝ์ /์ญ์ /ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ๋ O(n) ์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์, ํ์์ ์์ฃผํด์ผ ํ๋ค๋ฉด ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ , ๋ฐ์ดํฐ์ ์ถ๊ฐ/์ญ์ ๊ฐ ๋ง์ ๊ฒฝ์ฐ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.

์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ์๋ค.
๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ (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
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑ๋์์ต๋๋ค.
'๐ STUDY > FASTCAMPUS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 20์ผ์ฐจ (0) | 2021.11.20 |
|---|---|
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 19์ผ์ฐจ (1) | 2021.11.19 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 17์ผ์ฐจ (1) | 2021.11.17 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 16์ผ์ฐจ (1) | 2021.11.16 |
| ํจ์คํธ์บ ํผ์ค ์ฑ๋ฆฐ์ง 15์ผ์ฐจ (0) | 2021.11.15 |