https://leetcode.com/problems/reverse-linked-list/
var reverseList = function(head) {
// 처음 head 에 저장된 값을 current 통해 originValues 배열에 저장
// 저장된 배열을 pop 을 통해 빼내며 reverse 에 연결된 원본 head를 변경
let current = head;
let reverse = head;
let originValues = [];
while(current)
{
originValues.push(current.val);
current=current.next;
}
while(originValues.length>0)
{
reverse.val = originValues.pop()
reverse = reverse.next
}
return head;
};
//////////
var reverseList = function(head) {
// null 을 만들고
// 기존 리스트의 next 가 가리키는 방향을 바꿔서 기존 null 을 가리키고 있던
// 변수에 연결
// 원본 : 1>2>3>4>5>null
// 반복해야 할 것
// 1>null
// 2>(1>null)
// 3>(2>1>null)
// 4>(3>2>1>null )
// 5>(4>3>2>1>null )
// 새로운 null 에 기존 head 에 있던 node를 연결
let rerverse = null;
// head 가 null 이 아닐 때까지 이동
while(head){
// 만약 초기에 head.next = reverse 를 해버리면
// head가 1>null 이 되는데 그러면 2>3>4>5>null 을 가져올 방법이 없음
// 기존 list 에서 사용할 node 를 제외한 ( = head.next) 를 저장을 해놓고
// head.next 의 방향을 변경하여 기존 list 에서 node 를 빼돌리고
// head 는 앞서 저장해놓은 head.next 로 초기화 함
// 1만 reverse 에 연결하고 나머지는 다음 반복때 써야 함
// next 에 2>3>4>5>null 을 참조연결
let next = head.next;
// next 에 1빼고 기존 list 연결 해놓음
head.next = rerverse
// head = 1>null
rerverse = head
// rerverse = 1>null
head = next
// 미리 연결시켜놓은 참조로 다시 초기화 시킴
// head = 2>3>4>5>null
// rerverse = 1>null
}
return rerverse;
};