๐™‡๐™ž๐™ฃ๐™ ๐™š๐™™๐™‡๐™ž๐™จ๐™ฉ

uuuouuoยท2022๋…„ 7์›” 20์ผ
0
post-thumbnail

๐Ÿ“– ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ


๐Ÿ’ฌ ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

  • LinkedList์˜ ๊ฒฝ์šฐ ArrayList์™€ ๋‹ค๋ฅธ๊ฒŒ ๋…ธ๋“œ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ด์šฉ
  • ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๋งํฌ ํ•„๋“œ์— ์˜ํ•ด ๋‹ค์Œ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ
  • ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ ๋œ ๋ฆฌ์ŠคํŠธ
  • ํ—ค๋“œ๊ฐ€ ๊ฐ€์žฅ ์•ž์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ , ๋งํฌ ํ•„๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • ์ตœ์ข…์ ์œผ๋กœ null์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ

โ—พ ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋‹จ์ 

  • ํ•œ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด ์ด์ „ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ ๋ถˆ๊ฐ€๋Šฅ
    - ์›ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์ง€๋‚˜์ณค๋‹ค๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆœํšŒ

๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

  • ๋…ธ๋“œ: ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ + ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’ ํ˜•ํƒœ


โ—พ ๊ตฌํ˜„


๋…ธ๋“œ

class Node {
    public int data;
    public Node next;

    public Node(int data) {
        this.data = data;
        this.next = null; // ๋‹ค์Œ ๋…ธ๋“œ data ์ €์žฅ
    }
}

Main Class

์ดˆ๊ธฐ ์„ธํŒ…

    private final static int MAX_NODE = 10000;

    private Node[] node = new Node[MAX_NODE];
    private int nodeCnt = 0;
    private Node head;

    public Node getNode(int data) { // ์ƒˆ๋กœ์šด node ํ• ๋‹น
        node[nodeCnt] = new Node(data);
        return node[nodeCnt++];
    }

    public void init() {
        head = null;
    }

head ์‚ฝ์ž…

  • ๋งŒ์•ฝ ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ „๋‹ฌ๋œ data๊ฐ€ ํ—ค๋“œ
  • ์ด๋ฏธ ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
    public void addNode2Head(int data) {
        if (head == null) {
            head = getNode(data);
            return;
        }

        Node nHead = getNode(data);
        nHead.next = head;
        head = nHead;
    }

tail ์‚ฝ์ž…

  • ๋งŒ์•ฝ ํ—ค๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์ „๋‹ฌ๋œ data๊ฐ€ ํ—ค๋“œ
  • ํ—ค๋“œ๋ถ€ํ„ฐ ์ˆœํšŒํ•ด์„œ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ์ฐพ์€ ํ›„ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•จ
 public void addNode2Tail(int data) {
        if (head == null) {
            head = getNode(data);
            return;
        }

        Node curNode = head; // head ์ฐพ์•„์„œ tail ์ฐพ์•„์•ผํ•จ
        while (curNode.next != null) { // ํ˜„์žฌ node next๊ฐ€ null์ธ ์ง€์  ์ฐพ๊ธฐ
            curNode = curNode.next; // null์ด ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค์Œ next node๊ฐ€ cur
        }

        Node nTail = getNode(data); // ์ƒˆ๋กœ์šด tail ์ƒ์„ฑ
        curNode.next = nTail;
    }

ํ•ด๋‹น data๋ฅผ num๋ฒˆ์งธ์— ์‚ฝ์ž…

  • num๋ฒˆ์งธ์˜ ๋…ธ๋“œ ์ฐพ์€ ํ›„ ์ด์ „ ๋…ธ๋“œ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
  • ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋Š” ๊ธฐ์กด num๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
public void addNode2Num(int data, int num) {
        if (head == null) {
            head = getNode(data);
            return;
        }
        if (num == 1) { // ๋งจ์•ž์— ๋„ฃ์„ ๊ฒฝ์šฐ
            addNode2Head(data);
            return;
        }

        Node curNode = head;
        Node preNode = null;
        int cnt = 1;
        while (true) {
            if (cnt == num - 1) {
            	if (curNode == null) { // ์—ฐ๊ฒฐ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…
            		addNode2Tail(data);
            		return;
        	  	}
                preNode = curNode;
                curNode = curNode.next;
                break;
            }
            curNode = curNode.next;
            cnt++;
        }

        Node nNode = getNode(data);
        preNode.next = nNode;
        nNode.next = curNode;

    }

ํ•ด๋‹น data๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ ์‚ญ์ œ

  • ํ•ด๋‹น ๋…ธ๋“œ ์ฐพ์€ ํ›„ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ด์ „ ๋…ธ๋“œ๊ฐ€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
  • ๋งŒ์•ฝ ํ•ด๋‹น data๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์—†๋‹ค๋ฉด return
public void removeNode(int data) {
        if (head.data == data) {
            head = head.next;
            return;
        }

        Node curNode = head;
        Node preNode = null;
        Node nextNode = null;
        while (true) {
            if (curNode == null)
                return;

            if (curNode.data == data) {
                nextNode = curNode.next;
                break;
            }
            preNode = curNode;
            curNode = curNode.next;
        }

        preNode.next = nextNode;

    }


๐Ÿ’ฌ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ


  • ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์™€ํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒ
  • ๋‹ค์Œ ๋…ธ๋“œ ๋ฟ ์•„๋‹ˆ๋ผ ์ด์ „ ๋…ธ๋“œ์˜ ์ฐธ์กฐ๊นŒ์ง€ ์ถ”๊ฐ€
  • ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰ ๊ฐ€๋Šฅํ•ด ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ํ–ฅ์ƒ๋จ

0๊ฐœ์˜ ๋Œ“๊ธ€