Skip to content

Commit 874d4b9

Browse files
committed
Reverse Linked List Solution
1 parent 3e1698a commit 874d4b9

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

reverse-linked-list/clara-shin.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* 단일 연결리스트(Singly Linked List)의 노드 순서를 반대로 뒤집어서 리턴하기
3+
* follow-up: 연결리스트는 반복적(Iterative) 또는 재귀적(Recursive)으로 뒤집을 수 있는데, 두 가지 방법 다 가능?
4+
*
5+
* 반복문(Iterative) 방식
6+
* 포인터 세 개(prev, curr, next)를 사용, 리스트를 한 번 순회하며 역방향으로 연결을 바꿈
7+
* 시간복잡도: O(n), 공간복잡도: O(1)
8+
*
9+
* 재귀(Recursive) 방식
10+
* 재귀적으로 끝까지 들어간 뒤, 각 노드의 next를 역방향으로 연결
11+
* 시간복잡도: O(n), 공간복잡도: O(n) (재귀 콜스택)
12+
*/
13+
14+
/**
15+
* Definition for singly-linked list.
16+
* function ListNode(val, next) {
17+
* this.val = (val===undefined ? 0 : val)
18+
* this.next = (next===undefined ? null : next)
19+
* }
20+
*/
21+
/**
22+
* @param {ListNode} head
23+
* @return {ListNode}
24+
*/
25+
// 반복문(Iterative) 방식
26+
var reverseList = function (head) {
27+
let prev = null;
28+
let curr = head;
29+
while (curr) {
30+
const next = curr.next; // 다음 노드 저장
31+
curr.next = prev; // 현재 노드의 next를 prev로 변경
32+
prev = curr; // prev를 현재 노드로 이동
33+
curr = next; // curr를 다음 노드로 이동
34+
}
35+
return prev;
36+
};
37+
38+
// 재귀(Recursive) 방식
39+
var reverseList = function (head) {
40+
if (!head || !head.next) return head; // 빈 리스트 또는 마지막 노드인 경우, 빠른 리턴
41+
42+
const reversed = reverseList(head.next); // 나머지 리스트 역순
43+
head.next.next = head; // 다음 노드의 next를 현재 노드로
44+
head.next = null; // 현재 노드의 next를 null로
45+
return reversed;
46+
};

0 commit comments

Comments
 (0)