단일 연결 목록

단일 연결 목록이란 무엇입니까?
단일 연결 목록은 노드 모음이며 각 노드에는 값과 다른 노드 또는 null에 대한 포인터가 있습니다. 값은 모든 유효한 데이터 유형이 될 수 있습니다. 아래 다이어그램에서 이를 확인할 수 있습니다.



연결 리스트의 엔트리 노드를 Head라고 하고 마지막 노드를 Tail이라고 합니다.

Javascript에서 연결 목록은 다음과 같이 구현할 수 있습니다.

class Node {
    constructor(val) {
        this.val = val;
        this.next=null

    }
}

class SinglyLinkedList{
  constructor() {
        this.head = null;
        this.tail = null;
        this.length=0
    }


//This method used to push a value to end of the linked list
push(val){
   let newNode = new Node(val);
        if (!this.head) {
            this.head = newNode;
            this.tail=newNode;
        }
        else {
            this.tail.next = newNode;
            this.tail = newNode;
        }

        this.length++;
        return this;
}


//this method is used to remove an element from end of linked list.
 pop() {
        if(!this.head)return undefined

        let current = this.head;
        let previous = current;
        while (current.next) {
            previous = current;
            current = current.next

        }
        this.tail = previous
        previous.next = null;
        this.length = this.length - 1;
        if (this.length == 0) {
            this.tail = null
            this.head=null
        }
return this
    }


//this method is used to add a value to beginning of a list.
   unshift(val) {
        let newNode = new Node(val)
        if (!this.head) {
            this.head = newNode
            this.tail=newNode
        }
        else {
            let currentHead = this.head;
            newNode.next = currentHead;
            this.head=newNode
        }

        this.length++
        return this
    }



//this method is used to remove a value from beginning of a list
 shift() {

        if (!this.head) return undefined;
        if (this.length === 1) {
            this.head = null;
            this.tail = null

        }
        else {
            this.head = this.head.next;
        }

        this.length--;
return this;
    }


//this method is used to get a value from a particular position in list.

 get(position) {
        if (position < 0 ||position>=this.length) {
         return undefined
        }
        let index = 0;
        let currentHead = this.head;
        while (position!=index) {
            currentHead = currentHead.next;
            index++;
        }

return currentHead
    }


//this method is used to replace a value from a particular position in list.

   set(value, position) {

        let getValue = this.get(position)
        if (!getValue) return false;
        getValue.val=value
        return this
    }



//this method is user to insert an element in the list at a particular position.

insert(position, val) {
        if (position < 0 || position > this.length) {
            return undefined;
        }
        if (position === 0) {
            return this.unshift(val)
        }
        else if (position === this.length) {
          return  this.push(val)
        }
        let newNode = new Node(val)
        let previous = this.get(position - 1)
        if (!previous) return false;
        let nextEl = previous.next;
        newNode.next = nextEl;
        previous.next=newNode
        this.length++;

return this;
    }


//this method is used to remove a value from a particular position

remove(position) {

        if (position < 0 || position > this.length) {
            return undefined
        }

        if (position === 0) {
            return this.shift(val)
        }
        else if (position === this.length-1) {
            return this.pop(val)
        }
        let getEl = this.get(position-1)
        getEl.next = getEl.next.next;

        this.length--;
return this
    }

//this method is used to get the size of the list

size(){
return this.length
}

}


단일 연결 리스트의 장점


  • 삽입 및 삭제를 쉽게 수행할 수 있습니다.
  • 배열과 달리 삽입 및 삭제를 위해 요소의 이동이 필요하지 않습니다.

  • 단일 연결 리스트의 단점


  • 연결 목록에서는 검색 작업이 느립니다. 배열과 달리 데이터 요소에 대한 임의 액세스는 허용되지 않습니다. 노드는 첫 번째 노드부터 순차적으로 액세스됩니다.

  • BIG O 표기법


  • 액세스 O(n)
  • 검색 O(n)
  • 삽입 O(1)
  • 삭제 O(1)
  • 좋은 웹페이지 즐겨찾기