본문 바로가기

Java스터디/문제풀이

#03 자료구조 LinkedList

TestApp

import java.util.LinkedList;

public class TestApp {
    public static void main(String[] args) {
        MyLinkedList<Integer> list = new MyLinkedList<Integer>();

        System.out.println(list); // ""

        list.addFirst(1); // 맨 앞에 추가(더미노드 무시)
        System.out.println(list); // 1

        list.addLast(2); // 맨 뒤에 추가(더미노드 무시)
        list.addLast(3);
        list.addLast(4);
        list.addFirst(0);
        System.out.println(list); // 0 1 2 3 4

        Node<Integer> d = list.remove(3); // 지정한 인덱스의 노드 삭제
        System.out.println(list); // 0 1 2 4

        list.remove(3); // 지정한 인덱스의 노드 삭제
        System.out.println(list); // 0 1 2

        list.add(2, 3); // 지정한 인덱스에 값 3을 추가
        System.out.println(list); // 0, 1, 3, 2

        list.clear(); // 모두삭제
    }
}

 

LinekdList

public class MyLinkedList<T> {
    public Node<T> head;
    public Node<T> tail;

    // 맨 처음 값이 만들어지면 더미 노드 2개가 head와 tail로 만들어진다.
    // [D]<->[D]
    public MyLinkedList() {
        head = new Node<T>(null);
        tail = new Node<T>(null);
        head.nextNode = tail;
        tail.prevNode = head;
    }

    // index 위치 Node에 값을 가져온다.
    // [D] <-> [0] <-> [1] <-> [2] <-> [D]
    //          0       1       2
    public T get(int index) {
        Node<T> node = getNode(index);
        if(null == node)
            return null;
        else
            return (T) node.data;
    }

    // index 위치에 Node를 가져온다.
    public Node<T> getNode(int index){
    	return null;
    }

    // 새로운값 data를 Node로 만들어 맨앞에 위치(더미 노드는 무시한다.)
    // [D] <-> [0] <-> [1] <-> [2] <-> [D]
    // head  nextNode                  tail
    // [D] <-> [data] <-> [0] <-> [1] <-> [2] <-> [D]
    // head     node    nextNode                  tail
    public void addFirst(T data) {
    	
    }

    // 새로운값 data를 Node로 만들어 맨뒤에 위치(더미 노드는 무시한다.)
    // [D] <-> [0] <-> [1] <-> [2] <-> [D]
    // head                  prevNode  tail
    // [D] <-> [0] <-> [1] <-> [2] <-> [data] <-> [D]
    // head                  prevNode   node      tail
    public void addLast(T data) {
    	
    }

    // index 위치에 data값을 가진 Node 추가후 연결
    // [D] <-> [0] <-> [1] <-> [2] <-> [D]
    // [D] <-> [0] <-> [data] <-> [1] <-> [2] <-> [D]
    public void add(int index, T data) {
    	
    }

    // index의 값 삭제후 끊어진 연결을 유지
    // [D] <-> [0] <-> [1] <-> [2] <-> [D]
    //                 index
    // [D] <-> [0]  <-> [2] <-> [D]
    public Node<T> remove(int index) {
    	return null;
    }

    // 모두 삭제
    public void clear() {
    
    }

    // 1, 2, 3, 4, N
    @Override
    public String toString() {
        Node<T> curNode = head;
        StringBuffer sb = new StringBuffer();
        while(curNode.nextNode.data != null){
            curNode = curNode.nextNode;
            sb.append(curNode.data + " ");
        }
        return sb.toString();
    }
}

class Node<T>{
    public Node(T data){
        this.data = data;
    }
    public Object data = 0;
    public Node<T> prevNode;
    public Node<T> nextNode;
}
반응형