문제
92. Reverse Linked List II
https://leetcode.com/problems/reverse-linked-list-ii/
언어
자바스크립트(JavaScript)
접근 방법
- 먼저 루프를 돌면서 reverse 하기 전 숫자 배열과 reverse 하는 동안의 숫자 배열과 reverse가 끝난 후의 숫자 배열을 구한다.
- 각 배열을 이용하여 새로운 ListNode를 만든다.
코드
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} left
* @param {number} right
* @return {ListNode}
*/
var reverseBetween = function(head, left, right) {
let cnt = 1;
let node = head;
let beforeReverseArr = [];
let reverseArr = [];
let afterReverseArr = [];
while(node){
// cnt < left 구간 진입 전이면 beforeReverseArr에 숫자 저장
if(cnt < left){
beforeReverseArr.push(node.val);
}
// left <= cnt <= right면 reverseArr에 숫자 저장
if(cnt >= left && cnt <=right){
reverseArr.push(node.val);
}
// cnt > right면 afterReverseArr에 숫자 저장.
if(cnt > right){
afterReverseArr.push(node.val);
}
node = node.next;
cnt ++;
}
// 배열을 바탕으로 ListNode 생성
let result;
let prevListNode = null;
while(afterReverseArr.length){
result = new ListNode(afterReverseArr.pop(), prevListNode);
prevListNode = result
}
while(reverseArr.length){
result = new ListNode(reverseArr.shift(), prevListNode);
prevListNode = result
}
while(beforeReverseArr.length){
result = new ListNode(beforeReverseArr.pop(), prevListNode);
prevListNode = result
}
return result
};
결과
Runtime: 68 ms, faster than 97.22% of JavaScript online submissions for Reverse Linked List II.
Memory Usage: 40.1 MB, less than 5.56% of JavaScript online submissions for Reverse Linked List II.
복기
- 새롭게 ListNode를 정의하는 코드를 처음 짜봐서 많이 헤매었다. ListNode를 정의할 때는 반대 순서로 먼저 정의해야 한다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[LeetCode] 17. Letter Combinations of a Phone Number (0) | 2021.06.24 |
---|---|
[LeetCode] 15. 3Sum (0) | 2021.06.24 |
[LeetCode] 1. Two Sum (0) | 2021.06.23 |
[LeetCode] 12. Integer to Roman (0) | 2021.06.23 |
LeetCode 11. Container With Most Water (0) | 2021.06.23 |