1) 링크드 리스트 사이에 데이터 추가
- 링크드 리스트 사이에 데이터를 추가할 때는 부가적인 로직이 필요함
-> 기존 코드를 가져와서 붙여넣고, 중간에 데이터를 추가하는 메소드를 만들어봄
-> 여기서는 search 메소드와 addNodeInside 메소드를 추가함
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){
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;
}
}
}
2) 링크드 리스트에서 데이터 삭제
- 특정 노드를 삭제하는 기능도 구현할 수 있음
- 특정 노드를 삭제하면, 그 다음부터는 링크드 리스트는 해당 데이터를 찾을 수 없음
->기존에 작성했던 코드에 추가적인 기능을 작성함
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){
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 Integer 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;
}
}
참고
- 한 번에 끝내는 코딩테스트 369 Java편 초격차 패키지 Online편
'자료구조' 카테고리의 다른 글
링크드 리스트(4) - 더블 링크드 리스트 II (0) | 2022.04.28 |
---|---|
링크드 리스트(3) - 더블 링크드 리스트 (2) | 2022.04.28 |
링크드 리스트(1) (0) | 2022.04.24 |
스택 (1) | 2022.04.23 |
큐 (1) | 2022.04.23 |