개요

주어진 연결리스트를 뒤집어 리턴하는 문제이다.

 

Reverse Linked List - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

풀이

이전 노드의 정보와 다음 노드의 정보를 저장해두면 쉽게 문제를 해결할 수 있다.

그런데 문제는 잘 풀어놓고 엉뚱한 곳에서 삽질을 했는데 노드의 위치를 리턴하는 부분이었다.

 

당연히 node가 가리키는 부분을 리턴했었다.

 

그런데 마지막 연결리스트의 tail까지 탐색하기 위해선 node가 null이 될때까지 탐색하기 때문에 node를 리턴하면 당연히 null이 되어 아무것도 리턴시키지 않는다. 따라서 prev를 리턴헀어야 했다. return 되는 부분은 정답이 되는 부분이기 때문에 가장 먼저 확인해봐야겠다.

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function (head) {
  let prev = null;
  let node = head;
  let next = null;

  while (node) {
    next = node.next; // 다음 위치를 저장
    node.next = prev; // 현재 노드를 이전 노드로 바꾸기
    prev = node; // 이전 노드를 현재 노드로 치환
    node = next; //노드를 다음 위치로 옮기기
  }

  return prev;
};

 

Discuss

ES6문법을 활용하면 한 줄로 풀 수 있다는 것을 확인했다. 그런데 막상 풀려고하다보면 잘 생각나지 않는 부분인거같다.

var reverseList = function(head) {
    let [prev, current] = [null, head]
    while(current) {
        [current.next, prev, current] = [prev, current, current.next]
    }
    return prev
}
복사했습니다!