헤드는 데이터가 필요 없이 다음 노드로 연결되는 것만 필요하다.
바로 A와 B를 연결하게 되면, C와 D를 GarbageCollecter 에서 필요 없는 노드라 판단하여 삭제한다.
따라서 B가 C를 우선 연결하게 한 후 A와 B를 연결해준다.
head가 빈 데이터를 갖는 경우, 찾기가 훨씬 쉽다.
자바 구현 예시
class Node{
String data;
Node link;
}
class SinglyLinkedList{
Node head;
int size;
SinglyLinkedList(){
head = new Node();
}
// 삽입
void addData(int i, String data) {
//i 인덱스에 데이터 삽입 : 0이면 제일 앞에 추가, size와 동일하다면 제일 뒤에 추가
if (!(i > 0 || i > size)) {
System.out.println("삽입할 위치가 잘못되었습니다.");
return;
}
Node newnode = new Node();
newnode.data = data;
// 삽입할 위치 앞에 있는 노트 찾기
Node curr = head;
for(int k = 0; k < i; k++) {
curr = curr.link; // 다음 노드
}
// 새 노드부터 연결
newnode.link = curr.link; // 새 노드의 링크로 그 다음 노드를 링크
curr.link = newnode;
size++;
}
// 삭제
void removeData(int i) {
if (!(i < 0 || i >= size)) {
System.out.println("삭제할 위치가 잘못되었습니다.");
return;
}
size--;
// 삭제할 노드의 앞 노드로 이동
Node curr = head;
for(int k = 0; k < i; k++) {
curr = curr.link;
}
// 삭제할 노드의 앞 노드 link 가, 삭제할 노드 뒤의 노드와 연결되게 하는 것
curr.link = curr.link.link;
}
// 조회
void printAll() {
Node curr = head.link;
while(curr != null) {
System.out.print(curr.data + " -> ");
curr = curr.link;
}
System.out.println();
}
// 데이터 개수
}
class DoublyLinkedList{
Node head;
Node tail; // 시작과 끝 위치를 나타내는 더미노드
int size;
public DoublyLinkedList() {
head = new Node();
tail = new Node();
head.next = tail;
tail.prev = head;
}
void addData (int i, String data) {
// 0 이라면 제일 앞에 삽입
// size 라면 제일 뒤에 삽입
if (i < 0 || i > size) {
System.out.println("삽입이 불가능한 범위입니다.");
return;
}
size++;
// 삽입 위치 앞 노드를 찾는다.
Node curr = head;
for (int k = 0; k < i; k++) {
curr = curr.next;
}
// 새 노드 만들어주기
Node newnode = new Node();
newnode.data = data;
newnode.next = curr.next;
newnode.prev = curr;
// 기존 노드 연결 재구성
curr.prev.next = newnode;
curr.next.prev = newnode;
}
void removeData (int i) {
if(i < 0 || i > size) {
System.out.println("삭제가 불가능한 범위입니다.");
}
size--;
// 삭제할 위치 찾기
Node renode = head;
for(int k = 0; k <= i; k++) {
renode = renode.next;
}
renode.prev.next = renode.next;
renode.next.prev = renode.prev;
}
void printREverse() {
Node curr = tail;
while (curr != head) {
System.out.print("-- "+ curr.data);
}
System.out.println();
}
}