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
}
}