Algorithm/java 구현

자료구조 (java) :) LinkedList 구현하기

euncheol kim 2022. 3. 31. 17:22

goal

LinkedList의 구현 내용을 이해한다.

  1. 데이터 삽입구현
  2. 데이터 삭제구현
  3. 데이터 불러오기
package structure;

public class SinglyLinkedList {
    public static void main(String[] args) {
        LinkedList linked = new LinkedList();

        linked.unshipt("데이터1");
        linked.unshipt("데이터2");
        linked.unshipt("데이터3");
        linked.unshipt("데이터4");
        linked.push("push데이터1");
        linked.insert(2, "--insert 데이터1--");

        linked.getLinkedList();

    }
}

// Node 정보를 담는 클래스
class Node {
    public Node next = null;
    public String data;

    public Node(String data){
        this.data = data;
    }
}

/*     
        TODO
         1. 데이터 삽입 ( 처음 / 중간 / 마지막 )
         2. 데이터 삭제 ( 처음 - 중간 / 마지막 ) -> 미구현
         3. 링크드 리스트 데이터 읽어오기
 */
class LinkedList {
    private Node head = null;
    private Node tail = null;
    private int size = 0;

    // 데이터가 삽입되지 않은 경우
    private void headNull(Node newNode) {
        head = newNode;
        tail = newNode;
    }
    // 데이터가 첫 인덱스에 삽입된 경우
    public void unshipt(String data) {
        Node newNode = new Node(data);

        if(head == null) {
            this.headNull(newNode);
        } else {
            newNode.next = head;
            head = newNode;
        }
        size += 1;
    }

    // 데이터가 사용자 지정 인덱스에 삽입된 경우
    public void insert(int index, String data) {

        /*
            head가 null
             1. 이면서 index가 0인 경우 <새로운 노드 삽입>
             2. 이면서 index가 0이 아닌 경우 <종료>
        */
        if(head == null){
            if(index == 0) {
                this.headNull(new Node(data));
                size += 1;
            }
            return;
        }

        Node prevNode = null;
        Node curNode = head;
        for(int i=0; i < index; i ++){
            prevNode = curNode;
            curNode = curNode.next;
        }

        Node newNode = new Node(data);
        if (prevNode == null) {
            newNode.next = head;
            head = newNode;
            size += 1;
        } else if (curNode == null) {
            curNode = newNode;
            size += 1;
        } else {
            prevNode.next = newNode;
            newNode.next = curNode;
            size += 1;
        }

    }
    // 데이터가 마지막 인덱스에 삽입된 경우
    public void push(String data) {
        Node newNode = new Node(data);

        if(head == null) {
            this.headNull(newNode);
        } else {
            tail.next = newNode;
            tail = newNode;
        }
        size += 1;
    }

    public void getLinkedList() {
        Node node = head;
        System.out.println("size : " + this.size);
        for(int i = 0; i < size; i++){
            System.out.print(node.data + " ");
            node = node.next;
        }
    }


}