안녕하세요. PEACE- 입니다.
자료구조 스터디 [첫 번째] 글입니다.
이러한 구조의 연결리스트를 이용해 원하는 위치에 데이터를 삽입하고 삭제하는 기능을 구현할 수 있습니다. 본 포스팅에서는 맨 앞에 데이터를 삽입하고 맨앞의 데이터를 삭제하는 기능에 대해 다루겠습니다.
HEAD가 어떠한 노드도 가리키고 있지 않을 때 입니다.
'CASE 1'이므로 HEAD가 새 노드를 가리키도록 한다.
'CASE 2'이므로 새 노드는 HEAD가 가리키는 노드를 가리키도록 합니다.
마지막으로 HEAD가 새 노드를 가리키도록 하여 연결리스트를 완성합니다.
3. 삭제
첫 번째 노드를 삭제하는 방법은 아주 간단합니다. 하지만 삭제도 역시 두 가지 상황을 고려해야 합니다.CASE 1 : 현재 연결리스트에 데이터가 없을 때 ( HEAD == NULL ) CASE 2 : 현재 연결리스트에 데이터가 있을 때 ( HEAD != NULL )
'CASE 1'의 경우는 데이터를 삭제 할 수 없으므로 조건문을 통해 삭제 작업을 수행하지 않도록 처리해야합니다. 반대로 'CASE 2'의 경우에는 삭제 작업을 수행하야 합니다. 삭제 방법으로 Pointer라는 HEAD와 같은 별도의 노드형 변수를 만들어서 HEAD의 NEXT를 가리키고 HEAD가 첫 번째 노드를 떼어 내고 돌아올 수 있도록 합니다.
연결리스트에 데이터가 들어있는 상태
Pointer라는 노드형 변수를 생성해 HEAD의 NEXT를 가리킨다.
삭제할 노드(HEAD의 NEXT)의 NEXT를 NULL로 만들어준다.
HEAD가 Pointer가 가리키는 노드를 가리키도록 한다.
Pointer를 NULL로 만들어주어 Pointer의 연결을 해제한다.
4. 소스코드
Node.class
public class Node {
public int data;
public Node next;
}
LinkedList.class
/* 연결리스트
* 1. isEmpty : 데이터 존재 여부 판별
* 2. createNode : 새 노드 생성 후 반환
* 3. insert [맨앞]
* 4. delete [맨앞]
* 5. diplay : 데이터 출력
* */
public class LinkedList {
public Node head;
public LinkedList() {
head = null;
}
public boolean isEmpty() {
return head == null ? true : false;
}
private Node createNode(int data){
Node newNode = new Node();
newNode.data = data;
return newNode;
}
public void insertFirst(int data) {
Node newNode = createNode(data);
if (isEmpty())
head = newNode;
else {
newNode.next = head;
head = newNode;
}
}
public void deleteFirst() {
if (!isEmpty()) {
Node pointer = head.next;
head.next = null;
head = pointer;
pointer = null;
}
}
public void diplay() {
System.out.print("데이터 : ");
if (!isEmpty()) {
Node pointer = head;
System.out.print(pointer.data + " ");
while(pointer.next != null) {
pointer = pointer.next;
System.out.print(pointer.data + " ");
}
}
}
}
'자료구조' 카테고리의 다른 글
해시, 해시함수, 해시테이블 (0) | 2018.06.02 |
---|---|
[자료구조] 원형 큐의 기능 및 구현 (13) | 2017.07.13 |
[자료구조] 선형 큐의 기능 및 구현 (4) | 2017.07.11 |
[자료구조] 스택(연결리스트 이용) - push, pop (0) | 2017.07.06 |
[자료구조] 스택(배열 이용) - push, pop (1) | 2017.07.05 |
[자료구조] 선형 연결리스트 - 삽입, 삭제(Last) (0) | 2017.07.04 |