๋ฐ˜์‘ํ˜•
JuneBee
JuneBee
JuneBee
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (102)
    • ๐Ÿ‘” JOB (10)
      • ์ „ํ˜• ํ›„๊ธฐ (10)
    • ๐ŸŽฎ GAME (9)
      • ์ ค๋‹ค | ์™•๊ตญ์˜ ๋ˆˆ๋ฌผ ๊ฒŒ์ž„ ์ผ๊ธฐ (9)
    • ๐Ÿ““ STUDY (60)
      • JAVA (15)
      • TIL (2)
      • FASTCAMPUS (32)
      • ํ™˜๊ฒฝ์„ค์ • (2)
      • YOCTO (1)
      • OS (4)
      • ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์ธ ์•ก์…˜ (2)
    • ๐ŸŽงDAILY (6)
    • ๐Ÿ‡ฉ๐Ÿ‡ช GERMAN (17)
      • ๋Œ€ํ•™์› ์ง€์› (3)
      • ์ง€์› ํ›„๊ธฐ (11)
      • ๋…์ผ์–ด ์‹œํ—˜ (3)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ์ผ์ƒ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ž๋ฃŒ๊ตฌ์กฐ
  • SSAFY
  • ์ง์žฅ์ธ์ž๊ธฐ๊ณ„๋ฐœ
  • ํฌ๋ฃจ์Šค์นผ
  • ํŒจ์บ ์ฑŒ๋ฆฐ์ง€
  • ํŒจ์ŠคํŠธ์บ ํผ์Šคํ›„๊ธฐ
  • ๋…์ผ์œ ํ•™
  • ๋ฐฑํŠธ๋ž˜ํ‚น
  • ์ทจ์—…์ค€๋น„
  • ๋ชจํ—˜์ผ๊ธฐ
  • ์ •๋ ฌ
  • ์œ ํ•™
  • ์™•๊ตญ์˜๋ˆˆ๋ฌผ
  • ์„์‚ฌ
  • ํŒจ์ŠคํŠธ์บ ํผ์Šค
  • ์ ค๋‹ค
  • bruteforce
  • ์ง์žฅ์ธ์ธ๊ฐ•
  • ํ•œ๋ฒˆ์—๋๋‚ด๋Š”์ฝ”๋”ฉํ…Œ์ŠคํŠธ369JavaํŽธ์ดˆ๊ฒฉ์ฐจํŒจํ‚ค์ง€Online.
  • C/C++
  • ๋…์ผ
  • ๊ฒŒ์ž„์ผ๊ธฐ
  • telc
  • Java
  • ํ”Œ๋ ˆ์ด์ผ๊ธฐ
  • B1
  • ์‹ธํ”ผ
  • sort
  • ์™•๋ˆˆ
  • ๋…์ผ์–ด

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
JuneBee

JuneBee

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 19์ผ์ฐจ
๐Ÿ““ STUDY/FASTCAMPUS

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

2021. 11. 19. 19:47
728x90
๋ฐ˜์‘ํ˜•

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

์˜ค๋Š˜ ๊ฐ•์˜์—์„œ๋Š” ์–ด์ œ ์ •๋ฆฌํ•ด๋†“์€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„ํ•˜๊ธฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด์—ˆ๋‹ค. ์ด๋ฏธ ์–ด์ œ ์ •๋ฆฌํ–ˆ๊ณ , ๋‚ด์šฉ์ด ๋งŽ์ด ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™์•„ ์ด์ค‘ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๊ฒ ๋‹ค.

Doubly LinkedList (์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋‘ ๊ฐœ์˜ ๋งํฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  1. ๊ฐ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ์˜ ์ฐธ์กฐ ๋งํฌ์™€, ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฐธ์กฐ๋งํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค
  2. ์ „์ฒด ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•ด์•ผ ์ด์ „ ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ์ด์ „ ๋…ธ๋“œ์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์ด์ „ ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค
  3. ๋…ธ๋“œ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ๊ฐ€ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋งŽ์€ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค
  4. ์ž‘์—…์ด ๋” ๋‹จ์ˆœํ•˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ๋” ํšจ์œจ์ ์ด๋‹ค

๊ตฌํ˜„

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์œ„์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ - head, next, previous links๋ฅผ ํ‘œํ˜„ํ•œ ์ฝ”๋“œ์ด๋‹ค

๋…ธ๋“œ ํ‘œํ˜„

public class DLL {
    Node head; // head of list

    /* Doubly Linked list Node*/
    class Node {
        int data;
        Node prev;
        Node next;
        Node(int d) { data = d; } //next ์™€ prev ์€ null๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค
    }
}

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

// ๋งจ ์•ž์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ
public void push(int new_data)
{
    Node new_Node = new Node(new_data);

     /*์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ๋‹ค์Œ ํฌ์ธํ„ฐ๋ฅผ ๊ธฐ์กด์˜ head๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ 
      *์ด์ „ ํฌ์ธํ„ฐ๋Š” Null ๋กœ ๋งŒ๋“ ๋‹ค-> ์ฆ‰ ์ž๊ธฐ์ž์‹ ์„ head๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ*/
    new_Node.next = head;
    new_Node.prev = null;

    /* ๊ธฐ์กด Head์˜ ์ด์ „ ์ฐธ์กฐ๊ฐ’์ด ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค*/ 
    if (head != null)
        head.prev = new_Node;

    /* Head๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค */
    head = new_Node;
}

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

//์ฃผ์–ด์ง„ ๋…ธ๋“œ ๋’ค์— ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ตฌํ˜„์ด๋‹ค
//์ด์ „ ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค
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  2  3  ___  4 : ๋นˆ์นธ์— ๋…ธ๋“œ๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด, ์›๋ž˜๋Š” 3์ด 4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์—ˆ์ง€๋งŒ
     * ๋นˆ์นธ์— ๋“ค์–ด๊ฐˆ ๋…ธ๋“œ๊ฐ€ 4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค */

    new_node.next = prev_Node.next; 

    /* ์ฃผ์–ด์ง„ ๋…ธ๋“œ์˜ ๋‹ค์Œ ์ฐธ์กฐ ํฌ์ธํ„ฐ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•  ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค
         * ex: 1  2  3  ___ 4 : 3์€ ๋นˆ์นธ(์ƒˆ๋กœ์ถ”๊ฐ€ํ•˜๋ ค๋Š”๋…ธ๋“œ)์„ ๊ฐ€๋ฅด์ผœ์•ผํ•œ๋‹ค*/
    prev_Node.next = new_node;

    /* ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ์˜ ์ด์ „ ์ฐธ์กฐ ํฌ์ธํ„ฐ๋Š” ์•ž์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค
         *  ex: 1  2  3  ___ 4: ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ์˜ ์ด์ „์ฐธ์กฐํฌ์ธํ„ฐ๋Š” 3์„ ๊ฐ€๋ฆฌ์ผœ์•ผํ•œ๋‹ค */
    new_node.prev = prev_Node;

    /*์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ด์ „ ์ฐธ์กฐ ํฌ์ธํ„ฐ๊ฐ€ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒํ•œ๋‹ค */
    if (new_node.next != null)
        new_node.next.prev = new_node;
}

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

//๋งจ ๋’ค์— ๋…ธ๋“œ ์ƒ์„ฑ
void append(int new_data)
{
    Node new_node = new Node(new_data); //์ƒˆ ๋…ธ๋“œ

    Node last = head; //while ๋ฃจํ”„ ์•ˆ์—์„œ ์“ฐ์ž„

    // ์ƒˆ ๋…ธ๋“œ๋Š” ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ์ฐธ์กฐ๊ฐ’์€ null์„ ๊ฐ€์ง„๋‹ค
    new_node.next = null;

    // ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด, ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋…ธ๋“œ๋Š” ํ—ค๋“œ๊ฐ€ ๋œ๋‹ค
    if (head == null) {
        new_node.prev = null;
        head = new_node;
        return;
    }

    // ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊นŒ์ง€ ์ˆœํšŒํ•œ๋‹ค
    while (last.next != null)  //์›๋ž˜ ํ•ด๋“œ์˜ ๋‹ค์Œ ์ฐธ์กฐ๊ฐ’์ด ์กด์žฌํ•˜๋ฉด
        last = last.next;    //๊ทธ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ํ™•์ธํ•œ๋‹ค -> ์›๋ž˜ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์›์†Œ ํ™•์ธ

    // ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ next pointer ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒํ•œ๋‹ค
    last.next = new_node;

    // ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๋…ธ๋“œ์˜ ์ด์ „๊ฐ’์€ ๊ธฐ์กด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค
    new_node.prev = last;

###๋…ธ๋“œ ์‚ญ์ œ

//๋…ธ๋“œ ์‚ญ์ œ
void deleteNode(Node del)
 {       // Base case: head ๋‚˜ ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ null์ด๋ฉด ๋ฉˆ์ถค
        if (head == null || del == null) {
            return;
        }

        // ์ง€์šฐ๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ head ๋…ธ๋“œ์ผ ๋•Œ:
        if (head == del) {
            head = del.next; //์ƒˆ๋กœ์šด ํ•ด๋“œ๋ฅผ ๊ธฐ์กด์˜ ์ง€์šฐ๋ ค๋Š” ํ—ค๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ง€์ •
        }
                //ex: 3  2  1(del)  5 -> 1์€ 2๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š”๋ฐ, 5๊ฐ€ 1์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•ด์ค€๋‹ค
        if (del.next != null) {//์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
            del.next.prev = del.prev; //์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ์ด์ „ ์ฐธ์กฐ๊ฐ’์ด ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ์ด์ „ ํƒ์ƒ‰๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค
        }

        //ex : 3  2  1(del)  5 -> 2๊ฐ€ 5๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•ด๋ˆˆ๋‹ค
        if (del.prev != null) { //์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ํ—ค๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
            del.prev.next = del.next; //์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ์ด์ „๋…ธ๋“œ๊ฐ€ ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ๋‹ค์Œ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค
        }

        return; //free the memory
    }

code reference : Geeks for Geeks


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

 

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

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

fastcampus.co.kr

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

728x90
๋ฐ˜์‘ํ˜•

'๐Ÿ““ STUDY > FASTCAMPUS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 21์ผ์ฐจ  (0) 2021.11.21
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 20์ผ์ฐจ  (0) 2021.11.20
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 18์ผ์ฐจ  (0) 2021.11.18
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 17์ผ์ฐจ  (1) 2021.11.17
ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 16์ผ์ฐจ  (1) 2021.11.16
    '๐Ÿ““ STUDY/FASTCAMPUS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 21์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 20์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 18์ผ์ฐจ
    • ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 17์ผ์ฐจ
    JuneBee
    JuneBee
    โ‚Šหš.๐ŸŽง๐Ÿ““ ๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ ๐“‚ƒ๐Ÿ–Š

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