단일 연결 목록
단일 연결 목록은 노드 모음이며 각 노드에는 값과 다른 노드 또는 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 표기법
Reference
이 문제에 관하여(단일 연결 목록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/siva089/singly-linked-list-pi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)