[ Data Structure ] ๐Ÿ”— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)

2025. 1. 2. 20:14ยท๐Ÿงช Computer science/Data Structure

๐Ÿ“š ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)์˜ ๊ฐœ๋…

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List) ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ,
๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๊ฐ€ ์„œ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ๋“œ(Node)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ๋…ธ๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค:

๋ฐ์ดํ„ฐ: ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’
๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ(๋งํฌ): ๋‹ค์Œ ๋…ธ๋“œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ

 

๐Ÿ”— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)์˜ ํŠน์ง•

  • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น : ๋ฐฐ์—ด์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์ง€๋งŒ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋…ธ๋“œ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ํšจ์œจ์  : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ๋Š” ์ค‘๊ฐ„์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ,
    ๋ช‡ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค.

 

โš™๏ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)์˜ ๊ตฌ์กฐ

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Singly Linked List) ๋กœ,
๊ฐ ๋…ธ๋“œ๊ฐ€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

[๋ฐ์ดํ„ฐ | ๋‹ค์Œ ๋…ธ๋“œ] -> [๋ฐ์ดํ„ฐ | ๋‹ค์Œ ๋…ธ๋“œ] -> [๋ฐ์ดํ„ฐ | ๋‹ค์Œ ๋…ธ๋“œ] -> null

์—ฌ๊ธฐ์„œ null ์€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋” ์ด์ƒ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.

๐Ÿ“ ์ฃผ์š” ์—ฐ์‚ฐ

  • ์‚ฝ์ž… : ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ์œ„์น˜์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ.
    ์ฒซ ๋ฒˆ์งธ ์œ„์น˜, ์ค‘๊ฐ„ ์œ„์น˜, ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ญ์ œ : ์›ํ•˜๋Š” ์œ„์น˜์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ.
    ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋งํฌ๋ฅผ ๋Š๊ณ , ์ด์ „ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋œ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค.
  • ํƒ์ƒ‰ : ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฒซ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.

์˜ˆ์‹œ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— 3๊ฐœ์˜ ๋ฐ์ดํ„ฐ(1, 2, 3)๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•˜๋ฉด :

[1 | next] -> [2 | next] -> [3 | null]

๋งŒ์•ฝ ์ค‘๊ฐ„์— 4๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, 2์™€ 3 ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋œ๋‹ค :

[1 | next] -> [2 | next] -> [4 | next] -> [3 | null]

 

โœจ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)์˜ ๋™์ž‘ ๊ตฌํ˜„ํ•˜๊ธฐ

์šฐ์„  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋‚˜์˜ Node ๋ฅผ ์ถ”์ƒํ™” ํ•ด์„œ class๋ฅผ ์„ ์–ธํ•ด์คฌ๋‹ค.

  • LinkeList.mjs
    export class Node{
    constructor(data, next = null){
      this.data = data;
      this.next = next;
    }
    }

 

Node ์˜ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ Node ์ธ์Šคํ„ด์Šค๋“ค์„ ์ƒ์„ฑ ํ›„
node.next ํ”„๋กœํผํ‹ฐ์— ๋‹ค์Œ ์ˆœ์„œ์˜ Node๋ฅผ ์ฐธ์กฐ๋˜๊ฒŒ ์—ฐ๊ฒฐํ•œ ๋’ค

node1์— .data ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด node1์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธ ํ•˜๊ณ 
node1.next์— ์ฐธ์กฐ์‹œํ‚จ node2์˜ .data ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•ด ํ™•์ธ
node1์—์„œ node1.next์ธ node2์— ์ ‘๊ทผํ•ด node2์˜ .next ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” node3์˜ .data์— ์ ‘๊ทผํ•ด ์ถœ๋ ฅํ•ด๋ณด์•˜๋‹ค.

 

  • test.mjs
import { Node } from './Node.mjs'

// 1. Node ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
const node1 = new Node(1);
const node2 = new Node(2);
const node3 = new Node(3);

// 2. ๊ฐ Node์˜ next ํ”„๋กœํผํ‹ฐ์— ๋‹ค์Œ Node๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ์—ฐ๊ฒฐ
node1.next = node2;
node2.next = node3;

// 3. ๊ฐ Node์˜ next ํ”„๋กœํผํ‹ฐ๋ฅผ ํƒ€๊ณ  ์—ฐ๊ฒฐ๋œ Node๋ฅผ ํ™•์ธ
console.log(node1.data); // 1
console.log(node1.next.data); // 2
console.log(node1.next.next.data); // 3

 

 

์œ„์™€ ๊ฐ™์ด ๊ฐ `Node`๊ฐ€ ์ž˜ ์—ฐ๊ฒฐ๋œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List) ๋ฅผ LinkedList๋กœ ์ถ”์ƒํ™”ํ•ด class๋กœ ๊ตฌํ˜„ํ•˜๊ณ 
์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)์˜ ๋™์ž‘์„ ๋ฉ”์„œ๋“œ๋กœ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

// * ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ถ”์ƒ ์ž๋ฃŒํ˜•
// 1. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ -> printAll();
// 2. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ -> clear();
// 3. ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… -> insertAt(index, data);
// 4. ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž… -> insertLast(data);
// 5. ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ -> deleteAt(index);
// 6. ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ -> deleteLast();
// 7. ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ -> getNodeAt(index);

export class LinkedList {
  constructor(){
    // ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘ Node๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    this.head = null;

    // ์ด ์ €์žฅ๋œ Node์˜ ์ˆ˜
    this.count = 0;
  }

  /**
   * ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…
   * @param {number} index - ์‚ฝ์ž…ํ•  ์œ„์น˜ index
   * @param {any} data - ์‚ฝ์ž…ํ•  ๋ฐ์ดํ„ฐ
   */
  insertAt(index, data){    
    // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
    if(index > this.count || index < 0) throw new Error('๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.');

    // ์ƒˆ๋กœ์šด Node ์ƒ์„ฑ
    let newNode = new Node(data); 

    if(index === 0){ 
      // ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ์•ž๋ถ€๋ถ„์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ

      // 1. ์ƒ์„ฑ๋œ Node์˜ next๊ฐ€ head๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •
      newNode.next = this.head; 
      // 2. ์ƒ์„ฑ๋œ Node๋ฅผ head๋กœ ์„ค์ •
      this.head = newNode; 

    }else{ 
      // ์•ž๋ถ€๋ถ„ ์‚ฝ์ž…์„ ์ œ์™ธํ•œ ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ

      // head์—์„œ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— head๋กœ ์ดˆ๊ธฐํ™”
      let currentNode = this.head; 

      // ๋ชฉํ‘œ ์ธ๋ฑ์Šค ๋ฐ”๋กœ ์ „๊นŒ์ง€ next๋ฅผ ์ด์šฉํ•ด currentNode๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค.
      for(let i=0; i<index -1; i++){
        currentNode = currentNode.next;  
      }

      // 1. ์ƒˆ๋กœ์šด Node๊ฐ€ currentNode์˜ next Node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •
      newNode.next = currentNode.next;
      // 2. currentNode๊ฐ€ ์ƒˆ๋กœ์šด Node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์„ค์ •
      currentNode.next = newNode
    }

    // ์ƒˆ๋กœ์šด Node๊ฐ€ ์‚ฝ์ž…๋˜์—ˆ์œผ๋‹ˆ count๋ฅผ ์ฆ๊ฐ€
    this.count++;
  }

  /**
   * ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ
   * @returns {string} - ๋ชจ๋“  Node์˜ data๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด์— ๋‹ด์•„ ๋ฐ˜ํ™˜
   */
  printAll(){
    let currentNode = this.head;
    let text = '['

    while(currentNode){
      text += currentNode.data
      currentNode = currentNode.next;

      if(currentNode) text += ', ';
    }
    text += ']';
    console.log(text);    
    return text;
  }

  /**
   * ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
   */
  clear(){
    this.head = null; // head ์ดˆ๊ธฐํ™”
    this.count = 0; // count ์ดˆ๊ธฐํ™”
  }

  /**
   * ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…
   * @param {any} data - ์‚ฝ์ž…ํ•  ๋ฐ์ดํ„ฐ
   */
  insertLast(data){
    this.insertAt(this.count, data);
  }

  /**
   * ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ
   * @param {number} index - ์ œ๊ฑฐํ•  ์œ„์น˜ index
   * @return {{data: number, next: {data: number, next: any} | null}} - ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด.
   */
  deleteAt(index){
    // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
    if(index >= this.count || index < 0) throw new Error('์ œ๊ฑฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.');

    let currentNode = this.head;

    if(index === 0){
      // ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ์•ž๋ถ€๋ถ„์— ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ

      // ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ญ์ œ๋œ Node๋ฅผ ์ €์žฅ
      const deleteNode = this.head;
      // head๋ฅผ ๋‹ค์Œ Node์ธ head.next๋กœ ์„ค์ •
      this.head = this.head.next;
      // ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ count๋ฅผ ๋‚ด๋ฆฐ๋‹ค.
      this.count--;

      // ์‚ญ์ œํ•œ Node ๋ฐ˜ํ™˜
      return deleteNode;

    }else{
      // ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ์•ž๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ์œ„์น˜๋ฅผ ์ œ๊ฑฐํ•  ๊ฒฝ์šฐ

      // ์ œ๊ฑฐํ•  Node ์ด์ „ Node๊นŒ์ง€ ์ˆœํšŒํ•ด ์ œ๊ฑฐํ•  Node์˜ ์ด์ „ Node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
      for(let i=0; i<index -1; i++){
        currentNode = currentNode.next;
      }

      // currentNode.next๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๋‹ค์Œ Node ์ฆ‰, ์ œ๊ฑฐํ•ด์•ผ ํ•  Node๋ฅผ ์ €์žฅ
      let deleteNode = currentNode.next; 

      // ์ œ๊ฑฐํ•  Node์˜ next Node๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
      currentNode.next = currentNode.next.next;

      // ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ count๋ฅผ ๋‚ด๋ฆฐ๋‹ค.
      this.count--;

      // ์‚ญ์ œํ•œ Node ๋ฐ˜ํ™˜
      return deleteNode;      
    }
  }

  /**
   * ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ
   * @return {{data: number, next: {data: number, next: any} | null}} - ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด.
   */
  deleteLast(){
    return this.deleteAt(this.count - 1);
  }

  /**
   * ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ 
   * @param {number} index - ์ฝ๊ณ ์žํ•˜๋Š” Node์˜ index
   * @return {{data: number, next: any}} - ํ•ด๋‹น Node ๋ฐ˜ํ™˜
   */
  getNodeAt(index){
    // ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
    if(index >= this.count || index < 0) throw new Error('๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.');

    let currentNode = this.head;

    // currentNode๊ฐ€ ํ•ด๋‹น index๊นŒ์ง€ ์ˆœํšŒํ•œ๋‹ค.
    for(let i=0; i< index ; i++){
      currentNode = currentNode.next;
    }

    // ์ตœ์ข…์ ์œผ๋กœ ์ด๋™ํ•œ Node๋ฅผ ๋ฐ˜ํ™˜
    return currentNode;
  }
}

 

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List) ์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•์„ ์ •์˜ํ•˜๊ณ , ์ด๊ฑธ ๋ฐ”ํƒ•์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋’ค ๊ฐ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•ด๋ณด์•˜๋‹ค.

  • test.mjs
import { Node, LinkedList } from './LinikedList.mjs'

const list = new LinkedList();

console.log('===== insertAt() ๋‹ค์„ฏ ๋ฒˆ ํ˜ธ์ถœ =====');

list.insertAt(0,0); // 0๋ฒˆ์งธ ์œ„์น˜์— ๋ฐ์ดํ„ฐ 0 ์‚ฝ์ž…
list.insertAt(1,1); // 1๋ฒˆ์งธ ์œ„์น˜์— ๋ฐ์ดํ„ฐ 1 ์‚ฝ์ž…
list.insertAt(2,2); // 2๋ฒˆ์งธ ์œ„์น˜์— ๋ฐ์ดํ„ฐ 2 ์‚ฝ์ž…
list.insertAt(3,3); // 3๋ฒˆ์งธ ์œ„์น˜์— ๋ฐ์ดํ„ฐ 3 ์‚ฝ์ž…
list.insertAt(4,4); // 4๋ฒˆ์งธ ์œ„์น˜์— ๋ฐ์ดํ„ฐ 4 ์‚ฝ์ž…

list.printAll(); // ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ -> "[0, 1, 2, 3, 4]"

console.log('===== clear() ํ˜ธ์ถœ =====');

list.clear(); // ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ
list.printAll(); // ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ -> "[]"

console.log('===== insertLast() ํ˜ธ์ถœ =====');

list.insertLast(0); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 0์„ ์‚ฝ์ž…
list.insertLast(1); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 1์„ ์‚ฝ์ž…
list.insertLast(2); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 2์„ ์‚ฝ์ž…

list.printAll(); // ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ -> "[0, 1, 2]"

console.log('===== deleteAt() ํ˜ธ์ถœ =====');
list.deleteAt(0); // 0๋ฒˆ์งธ index ์ œ๊ฑฐ
list.printAll(); // ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ, "[1, 2]"

list.deleteAt(1); // 0๋ฒˆ์งธ index ์ œ๊ฑฐ
list.printAll(); // ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ, "[1]"

console.log('===== deleteLast() ํ˜ธ์ถœ =====');
list.insertLast(5); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 5์„ ์‚ฝ์ž…, "[1, 5]"

list.deleteLast(); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ
list.deleteLast(); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ

list.printAll(); // ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ -> "[]"

console.log('===== getNodeAt() ํ˜ธ์ถœ =====');

list.insertLast(1); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 1์„ ์‚ฝ์ž…
list.insertLast(2); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 2์„ ์‚ฝ์ž…
list.insertLast(3); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 3์„ ์‚ฝ์ž…
list.insertLast(4); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 4์„ ์‚ฝ์ž…
list.insertLast(5); // ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋’ค์— ๋ฐ์ดํ„ฐ 5์„ ์‚ฝ์ž…, "[1, 2, 3, 4, 5]"

const secondNode = list.getNodeAt(2); // 2๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ

console.log(secondNode); // Node { data: 3, next: Node { data: 4, next: Node { data: 5, next: null } }}

 

์žฅ์ 

๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
ํฌ๊ธฐ๊ฐ€ ์œ ๋™์ ์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŽ์ด ์ถ”๊ฐ€/์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ.
์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ฐฐ์—ด๋ณด๋‹ค ํšจ์œจ์ .

๋‹จ์ 

ํŠน์ • ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ ‘๊ทผ ์†๋„๊ฐ€ ๋А๋ฆผ.
๋…ธ๋“œ๋งˆ๋‹ค ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ๋ฐœ์ƒํ•จ.
์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ ์ƒํ™ฉ์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค.


'๐Ÿงช Computer science > Data Structure' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ Data Structure ] ๐Ÿก ํ(Queue)  (0) 2025.01.02
[ Data Structure ] ๐Ÿฅž ์Šคํƒ(Stack)  (0) 2025.01.02
'๐Ÿงช Computer science/Data Structure' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ Data Structure ] ๐Ÿก ํ(Queue)
  • [ Data Structure ] ๐Ÿฅž ์Šคํƒ(Stack)
Hyungjin
Hyungjin
dadada โ˜•๏ธ
  • Hyungjin
    ๐Ÿ“ hjux.log
    Hyungjin
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • ๐Ÿง‘๐Ÿป‍๐Ÿ’ป Dev
        • UI Components
        • Server
        • Practice
      • ๐Ÿ”  Language
        • JavaScript
        • TypeScript
        • Java
      • ๐Ÿ“š Library
        • ThreeJs (R3F)
        • GSAP
        • ReactJs
        • React Native
        • NextJs
        • VueJs
      • ๐ŸŒ Web
        • Web Animation
        • Web Performance
      • ๐Ÿงช Computer science
        • Algorithm
        • Data Structure
      • ๐ŸŽจ Design
        • Design System
        • Figma
        • Blender
      • ๐Ÿ‘พ Git
      • ๐Ÿšจ Error
      • โ˜€๏ธ Daily Life
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿˆโ€โฌ› Github
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Hyungjin
[ Data Structure ] ๐Ÿ”— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”