Leetcode Java Remove Duplicates from Sorted List II
업데이트:
문제
코드
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
return this.recursive(head, null);
}
private ListNode recursive(ListNode head, ListNode previous) {
if (head == null) {
return null;
} else {
if ((head.next != null && head.val == head.next.val) || (previous != null && head.val == previous.val)) {
return this.recursive(head.next, head);
} else {
head.next = this.recursive(head.next, head);
return head;
}
}
}
}
결과
설명
-
주어진 ListNode인 head의 val 값이 중복된 ListNode를 모두 제거하고 중복되지 않은 값들을 가진 ListNode를 반환하는 문제이다.
-
재귀 호출을 통해서 head와 이전의 값을 privious 변수에 넣어 중복된 ListNode들을 제외하고 역순으로 ListNode를 만들어 주어진 문제의 결과로 반환한다.
- head가 null인 경우, 주어진 ListNode인 head의 마지막 값이므로 그대로 반환한다.
- head가 null이 아닌 경우, 아래의 경우를 확인하여 중복을 제거한 값을 찾기 위해서 재귀 호출을 반복한다.
- head.next가 존재하고, head.val 값과 head.next의 val 값이 동일하면 현재 값과 다음 값이 동일한 경우이다.
- previous가 존재하고 head.val 값과 privious.val 값이 동일하면 이전 값과 현재 값이 동일한 경우이다.
- 위 두 경우는 중복된 값이 존재하므로 무시하고 재귀 호출의 값을 반환한다.
- 위 두 경우가 아니면 중복된 값이 존재하지 않으므로 head.next에 해당 재귀 호출의 값을 넣고 head를 반환한다.
- 재귀 호출을 통해 역순으로 중복이 제거되어 만들어진 ListNode를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기