728x90
https://jiwon-jjw.github.io/algorithm/2021/01/13/LeetCode83.html
LeetCode 83 - Remove Duplicates from Sorted List | Study Blog
또 한번 반복문이 진행 될 경우, cur = cur.next; 는, null이 되니, 반복문은 종료가 되고 값은 저장이 되어, head를 리턴하면 위와 같은 LinkedList를 얻을 수 있다.
jiwon-jjw.github.io
[Java] Leetcode 83 - Remove Duplicates from Sorted List
- 나의 답:
-
/** * 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) { if(head == null){ return head; } ListNode prev = head; ListNode cur = head.next; while (cur != null){ if(cur.val == prev.val){ prev.next = cur.next; cur = prev; } prev = cur; cur = cur.next; } return head; } }
- 노드의 삭제와 비슷한 문제였던 것 같다. 그림으로 설명 하자면, 다음과 같다.
- 아래와 같은 예시가 있다. 이는
- ListNode head 에 들어온 값이다.
- 처음에 다음과 같은 코드를 입력하여, prev값과, cur 값을 지정해주었다.이를 그림으로 표현하자면, 다음과 같다.
-
ListNode prev = head; ListNode cur = head.next;
- 그러나 살펴보니, prev의 값 1과 cur의 값 1이 서로 같다. 위의 코드에서 반복문을 살펴보면, 서로 값이 같을 경우, 중복값을 제외하라고 나타나있다.만일 값이 같을경우, prev의 다음 참조 값은, cur의 다음 참조값을 참조하라고 나타나 있다. 이를 그림으로 옮겨보면 다음과 같다.
-
if(cur.val == prev.val){ // 여기서 val이 위의 그림으로 따지면 1에 해당된다. prev.next = cur.next; cur = prev; }
- 또, 다음 줄에 cur은 prev이 현재 참조하고 있는 값을 가지도록 나타나있다.
- cur = prev; 때문에, 현재 cur이 있던 위치는, prev과 같아지게 된다.
- 그 다음 줄들을 살펴보면,이라고 작성되어있다. 현재 cur의 참조 위치는 prev과 같으니, prev은 이동이 없고 cur은 cur의 다음 참조 변수. 즉, 이전에 지정했던 2에 해당된다. (포인터가 이미 2로 옮겨갔기 때문에!)
-
prev = cur; cur = cur.next;
- prev의 값과, cur의 값은 서로 다르다. 그러니, 한 번 더 반복문이 실행되어 다음 값을 가리키게 된다.
- prev은 cur있던 자리, cur은 자신이 있던 자리가 참조하고 있는 다음 값으로!
- 6번 또한 중복값이 없으므로, 한 번 더 반복문이 실행된다.
- 이번엔 값이 중복되고 있다. 3번에서 실행되었던 조건문이 실행되어, 다음과 같이 prev의 포인터가 cur의 다음 값을 참조하게 된다.
- 또한, 조건문을 빠져나오기 전, 4번과 같은 형태로 돌아가게 된다.
- 또 한번 반복문이 진행 될 경우, cur = cur.next; 는, null이 되니, 반복문은 종료가 되고 값은 저장이 되어, head를 리턴하면 위와 같은 LinkedList를 얻을 수 있다.
- LinkedList는 참조값의 포인터들을 모두 옮겨놓은 것이기 때문에, 위의 코드에서 head를 직접적으로 언급한 것은 prev과 cur의 값을 지정한 것 뿐이지만, head자체에도 저장이 된다.
- 또, 사실 위에서 표현하지 않았지만, 실제로 값을 살펴보면 밑으로 빠진 중복값도 아래의 그림처럼 포인터가 다음 값을 향하게 된다.
- 결과:
728x90
'codingTest > LeetCode' 카테고리의 다른 글
[LeetCode] 88. Merge Sorted Array (0) | 2022.04.03 |
---|
댓글