• ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 18์ผ์ฐจ

    2021. 11. 18.

    by. JuneBee

    728x90
    ๋ฐ˜์‘ํ˜•

    ๊ฐ•์˜ ๋‚ ์งœ: 11/18/2021
    ์‹œ์ฒญ ๊ฐ•์˜: ์€๊ทผํžˆ ์–ด๋ ค์šด ์ž๋ฃŒ๊ตฌ์กฐ : ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

    LinkedList

    ์ •์˜

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)๋กœ ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•œ ์ค„๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๋ฐฉ์‹์˜ ์ž๋ฃŒ ๊ตฌ์กฐ.

    1. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ๋ฐ ์ˆ˜์ • ์‹œ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค → ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(1)
    2. ํŠน์ • ์œ„์น˜(index)๋กœ ์‚ฝ์ž…/์‚ญ์ œ/ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” O(n) ์ด ๊ฑธ๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ, ํƒ์ƒ‰์„ ์ž์ฃผํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    singly linked list

    ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค.

    ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (Singly Linked List)

    ๋‹จ์ผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ์ดํ„ฐ์˜ ์š”์†Œ๋ฅผ ์„ ํ˜•์ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ด๋‹ค.

    ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ: ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ํ•œ ๊ฐœ์˜ ํฌ์ธํ„ฐ์™€ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค

    1. ๋ฉ”๋ชจ๋ฆฌ์™€ ๋””์Šคํฌ์— ์—ฐ์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋Š” ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ์žฌํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ์žฌ๊ตฌ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ํŠน์ • ์ง€์ ์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์–ด์„œ ์œ ๋ฆฌํ•˜๋‹ค.
    2. ํฌ์ธํ„ฐ๋กœ ๋‹ค์Œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
    3. ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ํŠน์ • ๋ฆฌ์ŠคํŠธ ๊ฐ’์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌ์ŠคํŠธ ์•ˆ์˜ ํ•ญ๋ชฉ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค.

    ๊ตฌํ˜„

    ๊ธฐ๋ณธ ๊ตฌ์กฐ

    image

    class LinkedList {
        Node head; 
    
        class Node {
            int data;
            Node next;
    
            Node(int d) { data = d; } //next ๋Š” null ๋กœ ์ดˆ๊ธฐํ™”
        }
    }

    ๋งจ ์•ž์— ๋…ธ๋“œ ์ถ”๊ฐ€

    // ๋งจ ์•ž์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ : ์ƒˆ๋กœ์šด ํ•ด๋“œ ์ƒ์„ฑ
    public void push(int new_data)
    {
        Node new_node = new Node(new_data);
    
        new_node.next = head; //์ƒˆ ๋…ธ๋“œ๊ฐ€ ๊ธฐ์กด์˜ ํ—ค๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ด์ค€๋‹ค
    
        head = new_node;      //์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ๋ฅผ ํ—ค๋“œ๋กœ ์ง€์ •ํ•œ๋‹ค
    }

    image

    ํŠน์ • ๋…ธ๋“œ ๋’ค์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ถ”๊ฐ€

    //์ฃผ์–ด์ง„ ๋…ธ๋“œ ๋’ค์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ตฌํ˜„์ด๋‹ค
    //์ด์ „ ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค
    public void insertAfter(Node prev_node, int new_data)
    {
        if (prev_node == null) //๋น„์–ด์žˆ์œผ๋ฉด ์ถ”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
        {
            System.out.println("The given previous node cannot be null");
            return;
        }
    
        Node new_node = new Node(new_data);
    
        //ex: 1 _4(์ถ”๊ฐ€)_ 2 3 : 1์ด 2๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด, 4๊ฐ€ 2๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ด์ค€๋‹ค
        new_node.next = prev_node.next; //๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๊ฐ€ ์ด์ „๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒํ•œ๋‹ค
    
            //ex: 1 _4(์ถ”๊ฐ€)_2 3 : 1์€ ๊ธฐ์กด์— 2๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์—ˆ์ง€๋งŒ, 4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝํ•œ๋‹ค 
          prev_node.next = new_node;      //์ด์ „ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๊ฐ€ ์ƒˆ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค
    }

    image

     

    image

    ๋งจ ๋’ค์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ถ”๊ฐ€

    //๋งจ ๋’ค์— ์ถ”๊ฐ€
    public void append(int new_data)
    {
        Node new_node = new Node(new_data);
        Node last = head; //while ์—์„œ ์“ฐ์ž„ : ํ˜„์žฌ์˜ head๋ฅผ ์ง€์ •
    
        if (head == null)  //๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ํ—ค๋“œ๊ฐ€ ๋œ๋‹ค
        {
            head = new Node(new_data);
            return;
        }
    
        new_node.next = null; //๋…ธ๋“œ๋ฅผ ๋งจ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ๋Š” null์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์ค€๋‹ค
        //else ๋ฌธ ๋ถ€๋ถ„   
        while (last.next != null)  //ํ—ค๋“œ๊ฐ€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋ฉด
            last = last.next;      //last(์ฒ˜์Œ์— head๋กœ ์ดˆ๊ธฐํ™”)๋ฅผ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์„ค์ •->iterate ํ•œ๋‹ค
    
        last.next = new_node; //๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์ƒˆ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด์ค€๋‹ค
        return; //free the memory
    }

    image

    ๋…ธ๋“œ ์‚ญ์ œ

    //์ฃผ์–ด์ง„ key๋ฅผ ์‚ญ์ œ
    void deleteNode(int key)
        {
            Node temp = head, prev = null; //head ์ €์žฅ
    
            if (temp != null && temp.data == key) { //๋…ธ๋“œ๊ฐ€ head๊ณ  head ๋‹ค์Œ๊ฐ’์ด ์กด์žฌํ• ๋•Œ
                head = temp.next; // ํ—ค๋“œ๋ฅผ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค
                return;
            }
    
            while (temp != null && temp.data != key) { //iterate
                prev = temp;
                temp = temp.next;
            }
    
            if (temp == null) //๋ฆฌ์ŠคํŠธ์— ์ฃผ์–ด์ง„ key๊ฐ€ ์—†๋‹ค -> escape
                return;
    
            // ex: 1 2 3(์‚ญ์ œ) 4 : 2์˜ ํฌ์ธํ„ฐ๋ฅผ 3์ด ๊ธฐ์กด์— ๊ฐ€๋ฆฌํ‚ค๋˜ 4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒํ•œ๋‹ค
            prev.next = temp.next; //์ด์ „ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๊ฐ€ ์‚ญ์ œํ•  ํฌ์ธํ„ฐ์˜ ๋‹ค์Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒํ•œ๋‹ค
        }

    ์œ„ ์ฝ”๋“œ์—์„œ ์‚ญ์ œํ•  ๋…ธ๋“œ๊ฐ€ ํ—ค๋“œ์ผ ๊ฒฝ์šฐ ์„ค๋ช…:

    image

     if (temp != null && temp.data == key) { //๋…ธ๋“œ๊ฐ€ head๊ณ  head ๋‹ค์Œ๊ฐ’์ด ์กด์žฌํ• ๋•Œ
                head = temp.next; // ํ—ค๋“œ๋ฅผ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค
                return;
            }

    ํ—ค๋“œ๊ฐ€ ์•„๋‹Œ ๋ถ€๋ถ„ - while loop ๊ตฌํ˜„ ์„ค๋ช… :

    image

     while (temp != null && temp.data != key) { //iterate
                prev = temp;
                temp = temp.next;
            }
    
            if (temp == null) //๋ฆฌ์ŠคํŠธ์— ์ฃผ์–ด์ง„ key๊ฐ€ ์—†๋‹ค -> escape
                return;
    
            // ex: 1 2 3(์‚ญ์ œ) 4 : 2์˜ ํฌ์ธํ„ฐ๋ฅผ 3์ด ๊ธฐ์กด์— ๊ฐ€๋ฆฌํ‚ค๋˜ 4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒํ•œ๋‹ค
            prev.next = temp.next;

    source code reference: Geeks for Geeks - Linkedlist


    ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๐Ÿ‘‰ https://bit.ly/3FVdhDa

     

    ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ | ํŒจ์ŠคํŠธ์บ ํผ์Šค

    ๋”ฑ 5์ผ๊ฐ„ ์ง„ํ–‰๋˜๋Š” ํ™˜๊ธ‰์ฑŒ๋ฆฐ์ง€๋กœ ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰๋ฐ›์œผ์„ธ์š”! ๋” ๋Šฆ๊ธฐ์ „์— ์ž๊ธฐ๊ณ„๋ฐœ ๋ง‰์ฐจ ํƒ‘์Šน!

    fastcampus.co.kr

    ๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€