연결 목록의 다음 큰 요소
설명
단일 연결 목록node
이 주어지면 모든 노드의 값을 오른쪽에 있는 첫 번째 큰 노드의 값으로 바꿉니다. 노드에 다음으로 큰 노드가 없으면 값을 0
로 설정합니다.
제약:
n ≤ 100,000
여기서 n
는 node
의 노드 수입니다.예 1
입력
node = [3, 2, 4, 5]
산출
[4, 4, 5, 0]
예 2
입력
node = [1, 1, 1, 1]
산출
[0, 0, 0, 0]
직관
구현
import java.util.*;
/**
* class LLNode {
* int val;
* LLNode next;
* }
*/
class Solution {
public LLNode solve(LLNode node) {
Stack<Integer> maxStack = new Stack<>();
LLNode reverse = reverse(node);
LLNode curr = reverse;
while (curr != null) {
if (maxStack.isEmpty()) {
maxStack.push(curr.val);
curr.val = 0;
} else {
while (!maxStack.isEmpty() && curr.val >= maxStack.peek()) {
maxStack.pop();
}
if (maxStack.isEmpty()) {
maxStack.push(curr.val);
curr.val = 0;
} else {
int firstMax = maxStack.peek();
maxStack.push(curr.val);
curr.val = firstMax;
}
}
curr = curr.next;
}
return reverse(reverse);
}
private LLNode reverse(LLNode node) {
LLNode prev = null;
LLNode curr = node;
LLNode next;
while (curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
시간 복잡도
import java.util.*;
/**
* class LLNode {
* int val;
* LLNode next;
* }
*/
class Solution {
public LLNode solve(LLNode node) {
Stack<Integer> maxStack = new Stack<>();
LLNode reverse = reverse(node);
LLNode curr = reverse;
while (curr != null) {
if (maxStack.isEmpty()) {
maxStack.push(curr.val);
curr.val = 0;
} else {
while (!maxStack.isEmpty() && curr.val >= maxStack.peek()) {
maxStack.pop();
}
if (maxStack.isEmpty()) {
maxStack.push(curr.val);
curr.val = 0;
} else {
int firstMax = maxStack.peek();
maxStack.push(curr.val);
curr.val = firstMax;
}
}
curr = curr.next;
}
return reverse(reverse);
}
private LLNode reverse(LLNode node) {
LLNode prev = null;
LLNode curr = node;
LLNode next;
while (curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
Reference
이 문제에 관하여(연결 목록의 다음 큰 요소), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jiangwenqi/next-greater-element-of-a-linked-list-4pd4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)