문제링크: https://leetcode.com/problems/reverse-linked-list/
주어진 연결 리스트의 역순을 반환하는 문제다.
먼저 가장 간단한 방법으로 반복을 통해 주어진 연결리스트를 순회하고 새로운 리스트를 만드는 방법이다.
val
을 카피해 새 노드를 만들고 역순으로 연결시킨다.var reverseList = function(head) {
if (head === null) return head;
let result = new ListNode(head.val);
let cur = head;
while (cur.next !== null) {
cur = cur.next;
const temp = new ListNode(cur.val, result);
result = temp;
}
return result;
};
노드를 새로 생성하지 않고 기존 노드를 수정한다면 공간복잡도를 최적화 할 수 있다.
prev
와 curr
을 가지고 curr
-> prev
의 링크를 만들어 준다.curr.next
값으로 갱신, 이때 구조분해 할당의 snapshot을 통해 curr.next
값을 보존 후 저장한다.var reverseList = function(head) {
let [prev, current] = [null, head];
while(current) {
[current.next, prev, current] = [prev, current, current.next];
}
return prev;
}