<Easy> Remove Duplicates from Sorted List (LeetCode : C#)

이도희·2023년 4월 6일
0

알고리즘 문제 풀이

목록 보기
47/185

https://leetcode.com/problems/remove-duplicates-from-sorted-list/

📕 문제 설명

정렬된 연결 리스트의 head가 주어질 때 중복되는 값 제거 후 반환 (반환된 것 역시 정렬된 상태여야함)

  • Input
    정렬된 연결 리스트의 head
  • Output
    unique하게 변환 된 정렬된 연결 리스트 (ListNode)

예제

풀이 1.

값 두 개씩 체크하면서 다른 값 나오면 그때 ListNode에 추가하는 방식

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
        if (head == null) return head;

        ListNode currentNode = new ListNode(0);
        ListNode answerNode = currentNode;
        bool isSame = false;
        int currentVal = 0;

        while (head.next != null)
        {
            currentVal = head.val;
            head = head.next;
            if (currentVal != head.val)
            {
                currentNode.next = new ListNode(currentVal);
                currentNode = currentNode.next;
                isSame = false;
            }
            else
            {
                isSame = true;
            }
        }

        currentNode.next = isSame ? new ListNode(currentVal) : new ListNode(head.val);

        return answerNode.next;
        
    }
}

결과 1.

풀이 2.

새로 리스트 노드 따로 안 만들고 바로 넘기는 방식

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int val=0, ListNode next=null) {
 *         this.val = val;
 *         this.next = next;
 *     }
 * }
 */
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
        ListNode currentNode = head;
        while(currentNode?.next != null)
        {
            if(currentNode.val == currentNode.next.val)
            {
                currentNode.next = currentNode.next.next;
            }
            else
            {
                currentNode = currentNode.next;
            }
        }

        return head;
    }
}

결과 2.

(시간 의미 없음 -> 제일 좋은 풀이랑 같은 방식)

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글