노드(Node): 데이터 저장 단위(데이터값, 포인터)로 구성됩니다.
포인터(pointer): 각 노드 안에서 다음이나 이전의 노드와의 연결 정보(주소)를 가지고 있는 공간입니다.
일반적인 LinkedList 형태
그림 추가
public clfgass Node<T>{
T data; // 데이터
Node<T> next = null; // 포인터 역할
public Node(T data){
this.data = data;
}
}
Node<Integer> node1 = new Node<Integer>(1);
Node<Integer> node2 = new Node<Integer>(2);
node1.next = node2;
Node head = node1;
public class SingleLinkedList<T>{
public Node<T> head = null;
public class Node<T>{
T data;
Node<T> next = null;
public Node(T data){
this.data = data;
}
}
public void addNode(T data){
if(head == null){
head = new Node<T>(data);
}else{
Node<T> node = this.head;
while(node.next != null){
node = node.next;
}
node.next = new Node<T>(data);
}
}
public void printAll(){
if(head != null){
Node<T> node = this.head;
System.out.println(node.data);
while (node.next != null){
node = node.next;
System.out.println(node.data);
}
}
}
}
public class SingleLinkedList<T>{
public Node<T> head = null;
public class Node<T>{
T data;
Node<T> next = null;
public Node(T data){
this.data = data;
}
}
public void addNode(T data){
if(head == null){
head = new Node<T>(data);
}else{
Node<T> node = this.head;
while(node.next != null){
node = node.next;
}
node.next = new Node<T>(data);
}
}
public void printAll(){
if(head != null){
Node<T> node = this.head;
System.out.println(node.data);
while (node.next != null){
node = node.next;
System.out.println(node.data);
}
}
}
public Node<T> search(T data){
if(this.head == null){
return null;
}else{
Node<T> node = this.head;
while(node != null){
if(node.data == data){
return node;
}else{
node = node.next;
}
}
return null;
}
}
public void addNodeInside(T data, T isData){ // data는 현재 Node의 data, isData는 현재 Node가 저장할 위치의 이전 data
Node<T> searchedNode = this.search(isData);
if(searchedNode == null){
this.addNode(data);
}else{
Node<T> nextNode = searchedNode.next;
searchedNode.next = new Node<T>(data);
searchedNode.next.next = nextNode;
}
}
public boolean delNode(T isData){
if(this.head == null){
return false;
}else{
Node<T> node = this.head;
if(node.data == isData){
this.head = this.head.next;
return true;
}else{
while(node.next != null){
if(node.next.data == isData){
node.next = node.next.next;
return true;
}
node = node.next;
}
return false;
}
}
}
}
SingleLinkedList<Integer> linkedList = new SingleLinkedList<Integer>();
linkedList.addNode(1);
linkedList.addNode(2);
linkedList.addNode(3);
linkedList.printAll();
System.out.println("===");
linkedList.addNodeInside(5, 1);
linkedList.printAll();
System.out.println("===");
linkedList.addNodeInside(7, 20);
linkedList.printAll();
결과
1
2
3
===
1
5
2
3
===
1
5
2
3
7
SingleLinkedList<Integer> linkedList = new SingleLinkedList<Integer>();
linkedList.addNode(1);
linkedList.addNode(2);
linkedList.addNode(3);
linkedList.printAll();
System.out.println("===");
System.out.println(delNode(3));
System.out.println(delNode(3));
결과
1
2
true
false