Leetcode Java Delete Nodes From Linked List Present in Array
업데이트:
문제
코드
/**
* 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 modifiedList(int[] nums, ListNode head) {
int max = -1;
for (int num : nums) {
max = num > max ? num : max;
}
boolean[] frequency = new boolean[max + 1];
for (int num : nums) {
frequency[num] = true;
}
ListNode temp = new ListNode();
ListNode curr = temp;
while (head != null) {
if (head.val > max || frequency[head.val] == false) {
curr.next = head;
curr = curr.next;
}
head = head.next;
}
curr.next = null;
return temp.next;
}
}
결과
설명
-
head에서 nums 내 값들을 제거하고 반환하는 문제이다.
- 문제 풀이에 필요한 변수이다.
- max는 nums 내 가장 큰 값을 저장한 변수이다.
- frequency는 nums 내 값의 존재 유무를 저장할 배열로, $max + 1$ 크기의 배열로 초기화하여 nums의 값 위치에 true를 넣어준다.
- temp는 결과를 임시 저장할 변수로, 새 ListNode로 초기화한다.
- curr은 현재 노드를 저장할 변수로 temp로 초기화한다.
- head가 null이 아닐 때 까지 아래를 반복한다.
- haed의 val 값이 max보다 크거나 frequency에 존재하지 않는 경우, curr의 next에 head를 넣고 curr에 curr의 next 노드를 넣어 현재 노드를 제거해준다.
- head에 haed의 next 노드를 넣어 다음 반복을 수행한다.
- curr의 next 노드를 null로 바꾸어 마지막 노드로 만든 후, temp의 next 노드인 제거된 노드를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기