본문 바로가기
휴지통/알고리즘 & 자료구조

Double Linked List

by 신재권 2021. 7. 14.
package review1;

public class DoubleLinkedList<T> {
	public Node1<T> head = null;
	public Node1<T> tail = null;
	
	//데이터 추가
	public void addNode(T data){
		if(this.head == null){
			this.head = new Node1<T> (data);
			this.tail = this.head;
		}else{
			Node1<T> node = this.head;
			while(node.next != null){
				node = node.next;
			}
			node.next = new Node1<T>(data);
			node.next.prev = node;
			this.tail = node.next;
		}
	}
	
	public void printAll(){
		if(head != null){
			Node1<T> node = this.head;
			System.out.print("["+node.data+", ");
			while(node.next != null){
				node = node.next;
				System.out.print(node.data+", ");
			}
			System.out.println("]");
		}
	}
	
	
	public boolean deleteNode(T data){
		if(this.head == null){
			return false;
		}else{
			Node1<T> node = this.head;
			if(node.data == data){
				this.head = this.head.next;
				this.head.prev = null;
				return true;
			}else{
				while(node.next != null){
					if(node.next.data == data){
						node.next = node.next.next;
						node.next.prev = node;
						return true;
					}
					node.next = node;
				}
				return false;
			}
		}
	}
	
//	DoubleLinkedList는 양쪽으로 접근이 가능하다.
	
	public static void main(String[] args) {
		DoubleLinkedList<Integer> data_list = new DoubleLinkedList<Integer>();
		
		data_list.addNode(1);
		data_list.addNode(2);
		data_list.addNode(3);
		data_list.printAll();
		
		data_list.deleteNode(2);
		data_list.printAll();

	}

}

class Node1<T>{ //노드 클래스 선언 
	T data;  //데이터
	
	Node1<T> prev = null; //이전 요소를 가리킨다.
	Node1<T> next = null; //다음 요소를 가리킨다.
	 
	public Node1(T data){
		this.data= data;
	}
}

'휴지통 > 알고리즘 & 자료구조' 카테고리의 다른 글

Linked List  (0) 2021.07.14
Single Linked List  (0) 2021.07.14
ArrayList  (0) 2021.07.14
백준 1152  (0) 2021.07.14
백준 1157  (0) 2021.07.14