Java & Kotlin

java)linkedList 구현

필자A 2021. 8. 13. 09:41

 

head와 tail에 -1이 계속 유지됩니다.

끝마디를 제외하고

인덱스가 0이 아닌 1부터 시작합니다.

class MyLinkedList {
	Node head;
    Node tail;
    int count;
    
    public MyLinkedList() {
        head = new Node(-1);
        tail = new Node(-1);
        head.next = tail;
        tail.prev = head;
        count = 0;
    }
    
    public int get(int index) {
        Node temp = head;
        if(count >= index) {
	        for(int k = 0; k < index; k ++){
	            if(temp != null)
	                temp = temp.next;
	            else
	                return -1;
	        }
        }
        return temp.val;
    }
    
    public void addAtHead(int val) {
    	 Node newNode = new Node(val);
         newNode.next = head.next;
         newNode.prev = head;
         if(head.next != null) head.next.prev = newNode; 
         head.next = newNode;
         count++;
    }
    
    public void addAtTail(int val) {
        Node newNode = new Node(val);
        newNode.prev = tail.prev;
        newNode.next = tail;
        tail.prev.next = newNode;
        tail.prev = newNode;
        count++;
    }
    
    public void addAtIndex(int index, int val) {
        if(index < 0 || index > count ) {
        	return;
        }
        if(index == 0) {
        	addAtHead(val);
        	return;
        }
        if(index == count) {
        	addAtTail(val);
        	return;
        }
        
        Node newNode = new Node(val);
        Node tempNode = head;
        for(int i = 0; i < index; i++) {
        	tempNode = tempNode.next;
        }
        newNode.next = tempNode;
        if(tempNode.prev.prev != null)
        	newNode.prev = tempNode.prev.prev;
        else
        	newNode.prev = head;
        newNode.prev.next = newNode;
        newNode.next.prev = newNode;
        
        count++;
    }
    public void deleteAtIndex(int index) {
        if(count > index) {
            Node temp = head;
            for(int k = 0; k < index; k++){
                temp = temp.next;
            }
            temp.prev.next = temp.next;
            temp.next.prev = temp.prev;
            temp = null;
        }
        count--;
    }
    public void print() {
    	Node temp = head;
    	while(temp != null) {
    		System.out.print(temp.val + ", ");
    		temp = temp.next;
    	}
    }
    class Node {
        int val;
        Node next;
        Node prev;

        public Node(int val) {
            this.val = val;
            next = null;
            prev = null;
        }
    }
}
반응형