티스토리 뷰

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;
        }
    }
}
반응형

'Java & Kotlin' 카테고리의 다른 글

java logback Library  (0) 2021.09.27
sql_mode=only_full_group_by  (0) 2021.08.30
패스워드 암호화(작성중)  (0) 2021.08.04
mybatis mapper 사용기  (0) 2021.07.31
spring test?  (0) 2021.07.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함