알고리즘 챌린지

패스트캠퍼스 챌린지 4일차

JUN0126 2022. 1. 27. 23:36

더블 링크드 리스트 (Doubly linked list)

- 이중 연결 리스트라고도함

- 양방향으로 연결되어 있어서 노트 탐색이 양쪽으로 모두 가능

 

public class DoubleLinkedList<T>{
	public Node<T> head = null; // 앞 참조
    public Node<T> tail = null; // 뒤 참조
    
    public class Node<T>{
    	T data;
        Node<T> prev = null;
        Node<T> next = null;
    }
    
    public Node(T data){
    	this.data = data;
    }
    
    public void addNode(T data){
    	if(this.head == null){
        	this.head = new Node<T>(data);
            this.tail = this.head;
        }else{
        	Node<T> node = this.head;
            while(node.next != null){
            	node = node.next;
            }
            node.next = new Node<T>(data);
            node.next.prev = node;
            this.tail = node.next;
        }
    }
    
    public void printAll(){
    	if(this.head != null){
        	Node<T> node = this.head;
            System.out.println(node.data);
            while(node.next != null){
            	node = noide.next;
                System.out.println(node.data);
            }
        }
    }
    
    // 머리부터 찾기
    public T searchFromHead(T isData){
    	if(this.head == null){
        	return null;
        }else{
        	Node<T> node = this.head;
            while(node != null){
            	if(node.data == isData){
                	return node.data;
                }else{
                	node = node.next
                }
            }
            return null;
        }
    }
    
}

DoubleLinkedList<Integer> MyLinkedList = new DoubleLinkedList();
MyLinkedList.addNOde(2);
MyLinkedList.addNOde(5);
MyLinkedList.addNOde(8);

// 2 5 8 순서대로 출력

 

데이터를 임의 노드 앞에 노드를 추가하는 메서드 추가하기

public boolean insertToFront(T existedData, T addData){
	if(this.head == null){
    	this.head = new Node<T>(addData);
        this.tail = this.head;
    }else if(this.head.data == existedData){
    	Node<T> newHead = new Node<T>(addData);
        newHead.next = this.head;
        return true;
    }else{
    	Node<T> node = this.head;
        while(node != null){
        	if(node.data == existedData){
            	Node<T> nodePrev = node.prev;
                
                nodePrev.next = new Node<T>(addData);
                nodePrev.next.next = node;
                
                nodePrev.next.prev = nodePrev;
                node.prev = nodePrev.next;
                return true;
            }else{
            	node = node.next
            }
        }
        return false;
    }
}

 

 

 

 

 

4일차 인증

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/37BpXiC