자료구조

링크드 리스트(2)

Bryan Lee 2022. 4. 26. 11:18

 

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