LinkedList Java 제네릭을 사용하여 가장 중요한 메서드를 구현합니다.

소개



안녕하세요 여러분!
이 게시물에서는 LinkedList 데이터 구조를 간략하게 설명하고 Java 프로그래밍 언어를 사용하여 가장 중요한 메서드를 구현하려고 합니다. 따라서 메모리에서 작동하는 방식과 기본 메서드를 구현하는 방식을 알 수 있습니다.
Java의 제네릭을 사용하여 구현하므로 LinkedList에 모든 유형의 데이터를 저장할 수 있습니다.

연결된 목록



연결된 목록은 노드에 값을 저장하는 선형 데이터 구조입니다. 각 노드에는 다음 노드에 대한 데이터 및 참조의 두 부분이 있습니다.

연결 리스트는 배열 다음으로 가장 많이 사용되는 데이터 구조입니다. 다음은 Linked List의 개념을 이해하는 데 중요한 용어입니다.
  • 노드: 연결된 목록의 각 노드는
    요소.
  • 다음: 연결된 목록의 각 노드에는 다음에 대한 링크(참조)가 포함되어 있습니다.
    다음 노드는 다음이라고 합니다.
  • 헤드: 각 LinkedList에는 첫 번째를 가리키는 헤드가 포함되어 있습니다.
    목록의 노드이고 목록이 비어 있으면 NULL입니다.

  • 이 이미지는 연결된 목록 개념을 보여줍니다.


    기본 작동


  • 삽입: LinkedList에 요소를 추가합니다.
  • 삭제: LinkedList에서 요소를 삭제합니다.
  • 가져오기: 배열과 같은 인덱스(길이 0)에 지정된 요소의 데이터를 가져옵니다.
  • 지우기: LinkedList를 지우고 비웁니다.

  • 이제 이러한 모든 작업을 처음부터 Java로 구현하기 시작합니다.

    노드 클래스



    먼저 데이터와 다음의 두 부분을 포함하는 노드 클래스를 정의합니다.

    class Node<T> {
            T nodeData;
        Node<T> next; // points to the next node
    
    // Constructor to instantiate the node object with default values
            Node(T data) {
           this.nodeData = data;
           next = null;
        }
      }
    


    LinkedList 클래스



    둘째, 다음을 포함하는 LinkedList 클래스를 정의합니다.
  • head: 노드 유형의 개체입니다.
  • 길이: 정수 값(목록의 길이)입니다.

  • public class MyLinkedList<T> {
        Node<T> head;
        private int length = 0;
    // Constructor 
    MyLinkedList() {
            this.head = null;
        }
    }
    


    이제 기본 작업을 구현하기 시작합니다.

    삽입



    삽입에는 두 가지 방법이 있습니다.
    먼저public final void add(T data) 목록 끝에 삽입
    그리고public final void add(T data, int pos) 특정 위치에 삽입합니다.

    // Insert on the end of the LinkedList
        // Complexity: O(n)
        public final void add(T data) {
            Node<T> newNode = new Node<T>(data);
    
            if(this.head == null) {
                this.head = newNode;
                newNode.next = null;
            } else {
                Node<T> pointer = this.head;
    
                while (pointer.next != null) {
                    pointer = pointer.next;
                } 
    
                pointer.next = newNode;  
                newNode.next = null;
            }
            this.length++;
        }
        // Insert in Specific Position
        // Complexity: O(n)
        public final void add(T data, int pos) {
            if(pos == 0) {
                this.addFirst(data);
                return;
            }
            if(pos < 0 || pos > this.length) {
                System.out.println("Error: Out of range");
            } else {
                Node<T> newNode = new Node<T>(data);
                Node<T> pointer = head;
    
                for(int i = 1; i < pos; i++) {
                    pointer = pointer.next;
                }
                newNode.next = pointer.next;
                pointer.next = newNode;
                this.length++;
            }
        }
    
        // Insert First (begging of the list)
        public final void addFirst(T data) {
    
            Node<T> newNode = new Node<T>(data);
    
            newNode.next = head;
            head = newNode;
            this.length++;
        }
    


    삭제




    // Delete from last of LinkedList 
        // Complexity: O(n)
        public void remove() {
            if(isEmpty()) {
                System.out.println("Sorry, List is empty!!");
            } else if(this.length == 1) {
                head = null;
                System.out.println("Removed Successfully");
                this.length = 0;
            } else {
                Node<T> pointer = head;
    
                while(pointer.next.next != null) {
                    pointer = pointer.next;
                }
                pointer.next = null;
                this.length--;
                System.out.println("Removed Successfully");
            }
        }
        // Remove LinkedList Element from specific position
        // Complexity: O(n)
        public void remove(int pos) {
            if(pos < 0 || pos >= length) {
                System.out.println("Error: Position is out of range");
            } else if (pos == length - 1) {
                remove();
            } else {
                if (pos == 0) {
                    removeFirst();
                    return;
                }
                Node<T> pointer = head;
    
                for(int i = 1; i < pos; i++) {
                    pointer = pointer.next;
                }
                pointer.next = pointer.next.next;
                length--;
            }
        }
        // Remove the first element in the LinkedList
        public void removeFirst() {
            head = head.next;
            length--;
        }
        // Get LinkedList element's Data for specific Index
        // Complexity: O(n)
        public T get(int index) {
            if(index < 0 || index >= length) {
                return  null;
            }
            Node<T> pointer = head;
            for(int i = 0; i < index; i++) {
                pointer = pointer.next;
            }
            return pointer.nodeData;
        }
    


    얻다



    이 메서드는 index 매개 변수로 지정된 노드에 포함된 데이터를 반환합니다.

    // Get LinkedList element's Data for specific Index
        // Complexity: O(n)
        public T get(int index) {
            if(index < 0 || index >= length) {
                return  null;
            }
            Node<T> pointer = head;
            for(int i = 0; i < index; i++) {
                pointer = pointer.next;
            }
            return pointer.nodeData;
        }
    


    분명한




    public final void clear() {
            this.head = null;
            length = 0;
        }
    


    추가 방법




    // Get LinkedList Length
        public int getLingth() {
            return this.length;
        }
        // Return true if the LinkedList is empty
        public boolean isEmpty() {
            if (this.length == 0) return true;
            return false;
        }
    
        // Convert LinkedList to string
        // Complexity: O(n)
        public String toString()
        {
    
            String S = "{ ";
    
            Node<T> X = head;
    
            if (X == null)
                return S + " }";
    
            while (X.next != null) {
                S += String.valueOf(X.nodeData) + " -> ";
                X = X.next;
            }
    
            S += String.valueOf(X.nodeData);
            return S + " }";
        }
    
    


    인쇄 방법




    // Print all List elements
        // Complexity: O(n)
        public final void print() {
            Node<T> pointer = head;
    
            while (pointer != null) {
                System.out.println(pointer.nodeData);
                pointer = pointer.next;
            }
        }
    


    이 게시물이 도움이 되길 바랍니다.

    틀린 부분이 있었다면 죄송하고 읽어주셔서 감사합니다.

    BR
    아마드 무카할.

    좋은 웹페이지 즐겨찾기