Linked List (์ฐ๊ฒฐ ๋ฆฌ์คํธ) ๋?
๐ ๋ชฉ์ฐจ
โ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋?
Array(๋ฐฐ์ด) & List (๋ฆฌ์คํธ)
ํน์ง
์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ข ๋ฅ
์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ตฌํ (์๋ฐ)
โ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋?
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ํ ์ค๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๋ฐฉ์์ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋์ด ์๊ณ , ๋ ธ๋์ ํฌ์ธํฐ๊ฐ ์ด์ , ๋ค์ ๋ ธ๋์์ ์ฐ๊ฒฐ์ ๋ด๋นํฉ๋๋ค.
์๋ฃ์ ๋ ผ๋ฆฌ์ ์ธ ์์์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฌผ๋ฆฌ์ ์ธ ์์๊ฐ ์ผ์นํ์ง ์๊ณ , ๊ฐ๋ณ์ ์ผ๋ก ์์นํ๊ณ ์๋ ์์์ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํ์ฌ ํ๋์ ์ ์ฒด์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด๋ฃน๋๋ค.
๐ถ Array(๋ฐฐ์ด) & List (๋ฆฌ์คํธ)
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ดํดํ๊ธฐ ์์ ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ์ ์ปดํจํฐ ๊ณตํ์ ์ธ ๊ฐ๋ ๋ถํฐ ์ ๊น ์ง๊ณ ๋์ด๊ฐ๊ณ ์ ํฉ๋๋ค.
๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ํ ๋น๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐฐ์ด์ ์์์ ์ ๊ทผํ ๋ ‘์ธ๋ฑ์ค(Index)’ ๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋๋ฐ ์์์ ๋ฐ์ดํฐ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์์ ๋๋ค. ์ด๋ฅผ ํตํด ํน์ ์์์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ ์ฅ์ ์ด ์์ง๋ง, ๋ฐ๋๋ก ์ค๊ฐ์ ์๋ ์์ ์ฝ์ /์ญ์ ๊ฐ ๋๋ฆฝ๋๋ค.
๋ฆฌ์คํธ๋ ๊ฐ ์์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ํ ๋น๋์ง ์์ ์ ์์ต๋๋ค. ์ฆ, ์ฒซ๋ฒ์งธ ์์์ ์ฃผ์๋ฅผ ์๋๋ผ๋ ๊ทธ ๋ค์ ์์์ ์ฃผ์๋ฅผ ๋จ์ํ ๊ณ์ฐํ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค. ๋ฆฌ์คํธ์ ๊ฐ ์์๋ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ‘ํฌ์ธํฐ(Pointer)’ ๋ฑ์ ์ฌ์ฉํ์ฌ ๊ฐ ์์์ ์์๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด๋ฐ ํน์ง์ผ๋ก ๋ฐฐ์ด๋ณด๋ค ๋ฐ์ดํฐ์ ์ฝ์ /์ญ์ ๊ฐ ๋น ๋ฅธ ํธ์ ๋๋ค. ์, ๋ค์ ์์์ ํฌ์ธํฐ๋ง ๋ฐ๊ฟ์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์์ ์ง์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด์๋ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ์ ํ ๊ฒ์์ ํด์ผํ๋ ๋จ์ ์ด ์์ต๋๋ค.
๐ถ ํน์ง
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Singly Linked List)
- ๊ฐ ๋ ธ๋๊ฐ ๋ค์ ๋ ธ๋์ ๋ํด์๋ง ์ฐธ์กฐํ๋ ๊ฐ์ฅ ๋จ์ํ ํํ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ๋๋ค.
- Head๋ ธ๋๋ฅผ ์ฐธ์กฐํ๋ ์ฃผ์๋ฅผ ์์ด๋ฒ๋ฆด ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ๋จ์ ์ด ์์ต๋๋ค.
- ๋ณดํต Queue(ํ)๋ฅผ ๊ตฌํํ ๋ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
- FAT ํ์ผ ์์คํ ์ด ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํ์ผ ์ฒญํฌ(๋์ ๋ฉ๋ชจ๋ฆฌ๋ก ํ ๋น๋๋ ์์ญ)์ ์ฐ๊ฒฐํฉ๋๋ค.
- ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Double Linked List)
- ๊ฐ ๋ ธ๋๊ฐ ์ด์ ๋ ธ๋, ๋ค์ ๋ ธ๋์ ๋ํด์ ์ฐธ์กฐํ๋ ํํ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ ๋๋ค.
- ์ญ์ ๊ฐ ๊ฐํธํ๋ฉฐ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋นํด ๋ฐ์ดํฐ ์์์ ๊ฐํ์ง๋ง, ๊ด๋ฆฌํ ์ฐธ์กฐ๊ฐ 2๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ฝ์ ์ด๋ ์ ๋ ฌ์ ๊ฒฝ์ฐ ์์ ๋์ด ๋ ๋ง์ต๋๋ค.
- ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (Circular Linked List)
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋ง์ง๋ง ์์๊ฐ ์ฒซ๋ฒ์งธ ์์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
- ์คํธ๋ฆผ ๋ฒํผ์ ๊ตฌํ์ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
๐ถ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ตฌํ (์๋ฐ)
/*
* @ TITLE Linked List (์ฐ๊ฒฐ ๋ฆฌ์คํธ)
*/
// List๋ฅผ ๊ตฌ์ฑํ๋ Node ํด๋์ค
class ListNode{
private String data; // ๋ฐ์ดํฐ ์ ์ฅ ๋ณ์
public ListNode link; // ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ ๋งํฌ ๋
ธ๋
public ListNode() {
this.data = null;
this.link = null;
}
public ListNode(String data) {
this.data = data;
this.link = null;
}
public ListNode(String data, ListNode link) {
this.data = data;
this.link = link;
}
public String getData() {
return this.data;
}
}
public class LinkedList {
private ListNode head; // ListNode ํ์
์ head ๋
ธ๋ ์ธ์คํด์ค ๋ณ์
// LinkedList ์์ฑ์
public LinkedList() {
head = null; // head ๋
ธ๋ ์ด๊ธฐํ
}
// Node ์ฝ์
(์ค๊ฐ์ ์ฝ์
)
public void insertNode(ListNode preNode, String data) {
ListNode newNode = new ListNode(data); // ์๋ก์ด ๋
ธ๋ ์์ฑ
// preNode.link๋ preNode์ ๋ค์ ๋
ธ๋์ด๋ฏ๋ก,
// newNode.link = preNode.link๋ ์๋ก์ด ๋
ธ๋์ link๊ฐ preNode์ ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ.
newNode.link = preNode.link;
// preNode์ link๊ฐ ์๋ก์ด ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ.
// ์ต์ข
์ ์ผ๋ก 'preNode -> newNode -> ๊ธฐ์กด preNode์ ๋ค์ ๋
ธ๋ '์ด๋ ๊ฒ ๊ตฌ์ฑ๋จ.
preNode.link = newNode;
}
// Node ์ฝ์
(๋ง์ง๋ง์ ์ฝ์
)
public void insertNode(String data) {
ListNode newNode = new ListNode(data); // ์๋ก์ด ๋
ธ๋ ์์ฑ
if(head == null) {
// head ๋
ธ๋๊ฐ null์ธ ๊ฒฝ์ฐ ์๋ก์ด ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ
this.head = newNode;
} else {
// head ๋
ธ๋๊ฐ null์ด ์๋ ๊ฒฝ์ฐ temp ๋
ธ๋๊ฐ head๋ฅผ ์ฐธ์กฐ.
// tempNode๋ ๋ง์ง๋ง ๋
ธ๋๋ฅผ ์ฐพ์์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ฌ์ฉ.
ListNode tempNode = head;
// temp ๋
ธ๋์ link๊ฐ null์ด ์๋ ๋๊น์ง ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐ.
// tempNode.link๋ ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ณ ์์ผ๋ฏ๋ก,
// tempNode = tempNode.link๋ tempNode์ ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ํ๋ ๊ฒ.
// while๋ฌธ์ด ๋ชจ๋ ์คํ๋๋ฉด tempNode๋ ๊ฐ์ฅ ๋ง์ง๋ง ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๊ฒ ๋จ.
while(tempNode.link != null) {
tempNode = tempNode.link; // ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐ
}
// tempNode(๋ง์ง๋ง ๋
ธ๋)์ link๊ฐ ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ.
tempNode.link = newNode;
}
}
// Node ์ญ์ (์ค๊ฐ ๋
ธ๋ ์ญ์ )
public void deleteNode(String data) {
// preNode๋ head๊ฐ ๊ฐ๋ฆฌํค๋ ๋
ธ๋๋ฅผ ํ ๋น
ListNode preNode = head;
// tempNode๋ head๊ฐ ๊ฐ๋ฆฌํค๋ ๋
ธ๋์ ๋ค์ ๋
ธ๋. ์ฆ, preNode์ ๋ค์ ๋
ธ๋๋ฅผ ํ ๋น
ListNode tempNode = head.link;
// ์ฃผ์ด์ง ๋ฐ์ดํฐ๊ฐ preNode์ ๋ฐ์ดํฐ์ ์ผ์นํ๋ ๊ฒฝ์ฐ
// ์ฆ, ์ฒซ๋ฒ์งธ ๋
ธ๋์ ๋ฐ์ดํฐ์ ์ผ์นํ๋ ๊ฒฝ์ฐ
if(data.equals( preNode.getData() )) {
// head๋ preNode์ ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ.
head = preNode.link;
// preNode์ link๋ null์ ํ ๋นํ์ฌ ์ฐ๊ฒฐ์ ๋์.
preNode.link = null;
} else {
// tempNode๊ฐ null์ผ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ํ์
while(tempNode != null) {
// ์ฃผ์ด์ง ๋ฐ์ดํฐ์ temp ๋
ธ๋์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ ๊ฒฝ์ฐ.
if(data.equals( tempNode.getData() )) {
// tempNode๊ฐ ๋ง์ง๋ง ๋
ธ๋์ธ ๊ฒฝ์ฐ
if(tempNode.link == null) {
preNode.link = null;
} else {
// tempNode๊ฐ ๋ง์ง๋ง ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ
// preNode์ link๋ tempNode์ ๋ค์ ๋
ธ๋๋ฅผ ์ฐธ์กฐ.
// tempNode์ link๋ null์ ํ ๋นํ์ฌ ๋ค์ ๋
ธ๋๋ก์ ์ฐ๊ฒฐ์ ๋์.
preNode.link = tempNode.link;
tempNode.link = null;
}
break;
} else {
// ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ
// preNode์ tempNode๋ฅผ ํ ๋นํ๊ณ , tempNode์ ๋ค์ ๋
ธ๋ ํ ๋น.
preNode = tempNode;
tempNode = tempNode.link;
}
}
}
}
// Node ์ญ์ (๋ง์ง๋ง ๋
ธ๋ ์ญ์ )
public void deleteNode() {
ListNode preNode;
ListNode tempNode;
// head ๋
ธ๋๊ฐ null์ธ ๊ฒฝ์ฐ ๋ชจ๋ ๋
ธ๋๊ฐ ์ญ์ ๋์์ผ๋ฏ๋ก return
if(head == null) {
return;
}
// head ๋
ธ๋์ link๊ฐ null์ธ ๊ฒฝ์ฐ
// ๋
ธ๋๊ฐ 1๊ฐ ๋จ์์ ๊ฒฝ์ฐ
if(head.link == null) {
// head์ null์ ํ ๋นํ์ฌ ๋จ์ ๋
ธ๋์์ ์ฐ๊ฒฐ์ ๋์.
head = null;
} else {
// preNode๋ head๊ฐ ๊ฐ๋ฆฌํค๋ ๋
ธ๋๋ฅผ ํ ๋น
preNode = head;
// tempNode๋ head๊ฐ ๊ฐ๋ฆฌํค๋ ๋
ธ๋์ ๋ค์ ๋
ธ๋. ์ฆ, preNode์ ๋ค์ ๋
ธ๋๋ฅผ ํ ๋น
tempNode = head.link;
// tempNode์ link๊ฐ null์ด ์๋ ๋๊น์ง ํ ๋
ธ๋์ฉ ๋ค์ ๋
ธ๋๋ก ์ด๋.
// preNode๋ tempNode๋ฅผ ํ ๋นํ๊ณ
// tempNode๋ tempNode์ ๋ค์ ๋
ธ๋๋ฅผ ํ ๋น.
// ์ด๋ ๊ฒ ํ๋ฉด preNode๋ ๋ง์ง๋ง ๋
ธ๋์ ์ด์ ๋
ธ๋๊ฐ ๋๊ณ , tempNode๋ ๋ง์ง๋ง ๋
ธ๋๊ฐ ๋จ.
while(tempNode.link != null) {
preNode = tempNode;
tempNode = tempNode.link;
}
// preNode์ link๋ฅผ null๋ก ๋ง๋ค์ด์ ๊ฐ์ฅ ๋ง์ง๋ง ๋
ธ๋๋ฅผ ์ญ์
// ์ฆ, preNode์ ๋ค์ ๋
ธ๋์ธ tempNode๋ก์ ์ฐ๊ฒฐ์ ๋์.
preNode.link = null;
}
}
// Node ํ์
public ListNode searchNode(String data) {
ListNode tempNode = this.head; // temp ๋
ธ๋์ head๊ฐ ๊ฐ๋ฆฌํค๋ ์ฒซ ๋ฒ์งธ ํ ๋น.
// temp ๋
ธ๋๊ฐ null์ด ์๋ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ํ์
while(tempNode != null) {
// ์ฃผ์ด์ง ๋ฐ์ดํฐ์ temp ๋
ธ๋์ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ ๊ฒฝ์ฐ ํด๋น temp ๋
ธ๋๋ฅผ return
if(data.equals(tempNode.getData())) {
return tempNode;
} else {
// ๋ฐ์ดํฐ๊ฐ ์ผ์นํ์ง ์์ ๊ฒฝ์ฐ temp ๋
ธ๋์ ๋ค์ ๋
ธ๋ ํ ๋น.
tempNode = tempNode.link;
}
}
return tempNode;
}
// ๋ฆฌ์คํธ์ ๋
ธ๋๋ฅผ ์ญ์์ผ๋ก ๊ตฌ์ฑ
public void reverseList() {
ListNode nextNode = head; // head๊ฐ ์ฐธ์กฐํ๋ ์ฒซ๋ฒ์งธ ๋
ธ๋๋ฅผ ํ ๋น.
ListNode currentNode = null;
ListNode preNode = null;
// nextNode๊ฐ ์์ฐจ์ ์ผ๋ก ์ด๋ํ๋ฉฐ currentNode์ link๊ฐ preNode๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ.
// 1) preNode๋ฅผ currentNode ์์น๋ก ์ด๋
// 2) currentNode๋ nextNode ์์น๋ก ์ด๋
// 3) nextNode๋ ๋ค์ ๋
ธ๋ ์์น๋ก ์ด๋
// 4) currentNode์ link๋ preNode๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ
while(nextNode != null) {
preNode = currentNode; // preNode๋ currentNode ์์น๋ก ์ด๋
currentNode = nextNode; // currentNode๋ nextNode ์์น๋ก ์ด๋
currentNode.link = preNode; // currentNode์ link์ preNode๋ฅผ ํ ๋นํ์ฌ ์ญ์์ผ๋ก ์ค์
}
head = currentNode; // currentNode๊ฐ ๋ง์ง๋ง ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํฌ ๋, head๋ currentNode๋ฅผ ์ฐธ์กฐํ๋๋ก ํจ.
}
// ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ
public void printList() {
ListNode tempNode = this.head; // tempNode์ head๊ฐ ๊ฐ๋ฆฌํค๋ ์ฒซ๋ฒ์งธ ๋
ธ๋๋ฅผ ํ ๋น
// tempNode๊ฐ null์ด ์๋ ๋๊น์ง ๋ฐ๋ณตํ์ฌ ์ถ๋ ฅ
while(tempNode != null) {
System.out.print(tempNode.getData() + " ");
tempNode = tempNode.link; // temp ๋
ธ๋์ ๋ค์ ๋
ธ๋(tempNode.link) ํ ๋น.
}
System.out.println();
}
public static void main(String args[]) {
LinkedList linkedList = new LinkedList(); // ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์์ฑ
String str = "wed";
linkedList.insertNode("sun");
linkedList.insertNode("mon");
linkedList.insertNode("tue");
linkedList.insertNode("wed");
linkedList.insertNode("thu");
linkedList.insertNode("fri");
linkedList.insertNode("sat");
linkedList.printList();
System.out.println(linkedList.searchNode(str).getData());
linkedList.deleteNode(linkedList.searchNode(str).getData());
linkedList.printList();
str = "sun";
linkedList.deleteNode(linkedList.searchNode(str).getData());
linkedList.printList();
linkedList.reverseList();
linkedList.printList();
}
}
reference
DS #2. ์ฐ๊ฒฐ ๋ฆฌ์คํธ (LinkedList)
๋ ๋ฒ์งธ๋ก ์๋ฃ๊ตฌ์กฐ์์ ์ดํด ๋ณผ ๋ด์ฉ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(LinkedList)์ด๋ค. ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ด๋ค ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ(์ด๋ฅผ ๋ ธ๋๋ผ๊ณ ํํ)๋ฅผ ์ ์ฅํ ๋, ๊ทธ ๋ค์ ์์์ ์๋ฃ๊ฐ ์๋ ์์น๋ฅผ ๋ฐ์ด
devowen.com
https://namu.wiki/w/%EC%97%B0%EA%B2%B0%20%EB%A6%AC%EC%8A%A4%ED%8A%B8
์ฐ๊ฒฐ ๋ฆฌ์คํธ - ๋๋ฌด์ํค
๋ฐฐ์ด๊ณผ๋ ๋ฌ๋ฆฌ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ์ ์ถ๊ฐ/์ญ์ ๊ฐ O(1)์ ์๊ฐ์์ ์ํ๋๋ค. ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ๋๋ ์ญ์ ํ ๋ ํด๋น ์ง์ ๋ค์ชฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ด๋ํด์ผ ํ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๊ทธ๋ด ํ์๊ฐ
namu.wiki
https://freestrokes.tistory.com/84
Java๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) ๊ตฌํํ๊ธฐ
Java๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) ๊ตฌํํ๊ธฐ Java๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List)๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. 1. ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked List) ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ํ ์ค
freestrokes.tistory.com