Remove Duplicates from Sorted List

์ด ๋ฌธ์ œ๋Š” ์ •๋ ฌ๋œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฌธ์ œ ๋กœ, ํ•œ ๋ฒˆ์˜ ์ˆœํšŒ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ.


ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(ํˆฌ ํฌ์ธํ„ฐ)

  1. ํ˜„์žฌ ๋…ธ๋“œ(curr) ์™€ ๋‹ค์Œ ๋…ธ๋“œ(curr.next) ๋ฅผ ๋น„๊ต

    1. ๋งŒ์•ฝ curr.val == curr.next.val ์ด๋ฉด, curr.next ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด ์ค‘๋ณต์„ ์ œ๊ฑฐ

    2. ์ค‘๋ณต์ด ์•„๋‹ˆ๋ผ๋ฉด curr ์„ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™

  2. ์ˆœ์ž์ฒ™์œผ๋กœ ๋ฆฌ์ŠคํŠธ ๋๊นŒ์ง€ ๋ฐ˜๋ณต ํ•˜๋ฉด์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐ

โŒ›์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N)

๐Ÿ“Œ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(1) (์ถ”๊ฐ€ ๊ณต๊ฐ„ ์—†์ด ์›๋ณธ ๋ฆฌ์ŠคํŠธ ์ˆ˜์ •)


โœ… Java ์ฝ”๋“œ

public class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) return null;
        
        ListNode curr = head; // ํ˜„์žฌ ๋…ธ๋“œ ํฌ์ธํ„ฐ
        
        while(curr.next != null) { // ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ
            if(curr.val == curr.next.val) {
                curr.next = curr.next.next; // ์ค‘๋ณต์ด๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ธฐ
            } else {
                curr = curr.next; // ์ค‘๋ณต์ด ์•„๋‹ˆ๋ฉด ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™
            }
        }
        return head; // ์ค‘๋ณต ์ œ๊ฑฐ๋œ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜
    }
    
    //ํ…Œ์ŠคํŠธ์šฉ ๋ฉ”์„œ๋“œ (๋ฐฐ์—ด => LinkedList ๋ณ€ํ™˜)
    public static ListNode createLinkedList(int[] values) {
        if(values.length == 0) return null;
        ListNode head = new ListNode(values[0]);
        ListNode curr = head;
        for(int i = 1; i < values.length; i++) {
            curr.next = new ListNode(values[i]);
            curr = curr.next;
        }
        return head;
    }
    
    //์ถœ๋ ฅ ๋ฉ”์„œ๋“œ
    public static void printLinkedList(ListNode head) {
        ListNode curr = head;
        while(curr != null) {
            System.out.println(curr.val + " ");
            curr = curr.next;
        }
        System.out.println();
    }
    
    public static void main(String[] args) {
        Soultion solution = new Solution();
        
        ListNode head1 = createLinkedList(new int[]{1,1,2});
        ListNode result1 = solution.deleteDuplicates(head1);
        printLinkedList(result1); // result : 1 2
        
        ListNode head2 = createLinkedList(new int[]{1,1,2,3,3});
        ListNode result2 = solution.deleteDuplicates(head2);
        printLinkedList(result2); // result : 1 2 3
    }
}

๐Ÿ“Œ์ฝ”๋“œ ์„ค๋ช…

  1. deleteDuplicates(ListNode head)

    1. ํ˜„์žฌ ๋…ธ๋“œ(curr ) ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ์ค‘๋ณต์ด ์žˆ๋Š” ๊ฒฝ์šฐ, curr.next ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด ์‚ญ์ œ.

    2. ๋ฆฌ์ŠคํŠธ ๋๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐ

  2. createLinkedList(int[] values)

    1. ๋ฐฐ์—ด์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

  3. printLinkedList(ListNode head)

    1. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ

Last updated

Was this helpful?