Leetcode Java Next Greater Node In Linked 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 int[] nextLargerNodes(ListNode head) {
List<Integer> list = new ArrayList<>();
for (ListNode node = head; node != null; node = node.next) {
list.add(node.val);
}
int[] result = new int[list.size()];
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < list.size(); i++) {
while (!stack.isEmpty() && list.get(stack.peek()) < list.get(i)) {
result[stack.pop()] = list.get(i);
}
stack.push(i);
}
return result;
}
}
결과
설명
-
head의 각 노드에서 우측에 있는 값들 중 현재 값보다 가장 큰 값을 찾아 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- list는 각 노드의 값들을 넣어줄 변수로, ArrayList로 정의하고 node의 val 값을 순차적으로 넣어준다.
- result는 결과를 넣을 변수로, list의 크기의 정수 배열로 초기화한다.
- stack은 노드 별 각 값을 비교하고 넣을 변수로, Stack으로 초기화한다.
- 0부터 list의 길이 미만까지 i를 증가시키면서 아래를 수행한다.
- stack이 비어있지 않으면서 list에서 stack의 가장 나중에 넣은 값에 해당하는 위치의 값이 list의 i번째 값보다 작은 경우, result의 stack 내 앞의 값을 꺼내 해당하는 위치에 list의 i번째 값을 넣어준다.
- 값의 비교를 위해 stack에 i를 넣어준다.
- 반복이 완료되면 각 노드 별 비교 값이 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기