1๏ธโฃ Node(๋ ธ๋).
Node(๋ ธ๋) ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํธ๋ฆฌ, ๊ทธ๋ํ ๋ฑ์ ์๋ฃ๊ตฌ์กฐ์์ ๊ธฐ๋ณธ์ ์ธ ๋จ์ ์์๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ ธ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉฐ, ๋ค๋ฅธ ๋ ธ๋์์ ์ฐ๊ฒฐ์ ๋ํ๋ด๋ ํฌ์ธํฐ(์ฐธ์กฐ)๋ฅผ ํฌํจํฉ๋๋ค.
1๏ธโฃ Node์ ๊ตฌ์ฑ ์์.
-
๋ฐ์ดํฐ(Data) : ๋ ธ๋๊ฐ ์ ์ฅํ๋ ์ค์ ๊ฐ์ ๋๋ค. ์ด๋ ์ซ์, ๋ฌธ์, ๊ฐ์ฒด ๋ฑ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ด ๋ ์ ์์ต๋๋ค.
-
ํฌ์ธํฐ(์ฐธ์กฐ, Pointer) : ๋ค์ ๋ ธ๋(๋๋ ๋ค๋ฅธ ๊ด๋ จ๋ ๋ ธ๋)๋ฅผ ๊ฐ๋ฆฌ์ง๋ ์ฐธ์กฐ์ ๋๋ค. ํฌ์ธํฐ์ ์์ ์ข ๋ฅ๋ ์๋ฃ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
- Singly Linked List : ํ๋์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.
- Doubly Linked List : ์ด์ ๋ ธ๋์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๊ฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค.
- ํธ๋ฆฌ(Tree) : ๋ถ๋ชจ ๋ ธ๋, ์์ ๋ ธ๋ ๋ฑ ์ฌ๋ฌ ๋ฐฉํฅ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ๊ทธ๋ํ(Graph) : ์ฌ๋ฌ ๊ฐ์ ์ธ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
Singly Linked List์ Node
Singly Linked List์์์ ๋
ธ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
public class Node {
int data; // ๋
ธ๋๊ฐ ์ ์ฅํ๋ ๋ฐ์ดํฐ
Node next; // ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
public Node(int data) {
this.data = data;
this.next = null;
}
}
Doubly Linked List์ Node
Doubly Linked List์์์ ๋
ธ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
public class DoublyNode {
int data; // ๋
ธ๋๊ฐ ์ ์ฅํ๋ ๋ฐ์ดํฐ
DoublyNode next; // ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
DoublyNode prev; // ์ด์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
public DoublyNode(int data) {
this.data = data;
this.next = null;
this.prev = null;
}
}
2๏ธโฃ Node๋ฅผ ์ฌ์ฉํ๋ ์์ .
Singly Linked List
Singly Linked List๋ ๊ฐ ๋ ธ๋๊ฐ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ๋ก ์ฐ๊ฒฐ๋ ๋ฆฌ์คํธ ์ ๋๋ค.
์๋๋ Singly Linked List๋ฅผ ๊ตฌํํ ์์ ์ ๋๋ค.
//SinglyLinkedList
public class SinglyLinkedList {
private Node head;
public SinglyLinkedList() {
this.head = null;
}
// ๋ฆฌ์คํธ์ ๋งจ ์์ ๋
ธ๋ ์ถ๊ฐ
public void addFirst(int data) {
Node newNode = new Node(data);
newNode.next = head;
head = newNode;
}
// ๋ฆฌ์คํธ์ ๋งจ ๋์ ๋
ธ๋ ์ถ๊ฐ
public void addLast(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
// ๋ฆฌ์คํธ์ ํน์ ๊ฐ ์ญ์
public void delete(int data) {
if (head == null) {
return;
}
if (head.data == data) {
head = head.next;
return;
}
Node current = head;
while (current.next != null && current.next.data != data) {
current = current.next;
}
if (current.next != null) {
current.next = current.next.next;
}
}
// ๋ฆฌ์คํธ ์ถ๋ ฅ
public void printList() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}
// Main
public class Main {
public static void main(String[] args) {
// Singly Linked List ์์ฑ
SinglyLinkedList singlyLinkedList = new SinglyLinkedList();
singlyLinkedList.addFirst(1);
singlyLinkedList.addLast(2);
singlyLinkedList.addLast(3);
singlyLinkedList.printList(); // 1 2 3
singlyLinkedList.delete(2);
singlyLinkedList.printList(); // 1 3
}
}