알고리즘 챌린지
패스트캠퍼스 챌린지 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;
}
}
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.