코드노트

연결리스트 역순 출력, 반대로 연결 이해하기, 자바스크립 본문

Code note/자바스크립트 알고리즘 문제풀이

연결리스트 역순 출력, 반대로 연결 이해하기, 자바스크립

코드노트 2022. 9. 13. 01:02

문제는 간단하다

head → 1 → 2 → 3 → null

이렇게 node가 연결되어 있는 연결리스트를

head → 3 → 2 → 1 → null

역순! 반대로 출력하게 수정해야한다.

 

연결리스트에 대해서 이해가 되어야지만 풀 수 있는 문제였다.

이 문제를 이해하는데 하루가 넘게 걸렸다... 하...

그만큼 성취감은 두배였지만... 제발 바로 이해해줘 내 머리야..

 

우선 코드부터 보면서 설명을 해야할거 같다.

function answer(ll) {
  let current = ll.head,
    prev = null,
    next;
  while (current !== null) {
    next = current.next;
    current.next = prev;
    prev = current;
    current = next;
  }
  ll.head = prev;

  return ll;
}

코드는 정말 간단하다.

current = head를 넣어주고

prev = null을 넣어준다.

그리고 next 변수를 만들어준다.

이놈의 next 때문에 이해가 정말 안되었다...

while문을 하나하나씩 따라가면서 내가 이해한 풀이를 적어보려고 한다..

혹시나 내가 이해가 잘못된거 같으면 바로잡아주세요..

 

 

현재 노드 출력

head → 1 → 2 → 3 → null

첫 while문이다 while은 current(head)가 null을 만날때까지 실행한다.

next = current.next;

- 현재 head인 1의 next는 2이다. 2는 next에 넣어두고

current.next = prev;

- 1의 next자리에 prev(null)를 넣어준다.

- 여기서 1은 2와 연결되는게 아니라 null과 연결된다.

- 현재 연결리스트 값 1 → null

prev = current;

- prev값을 current인 1로 초기화시켜준다.

current = next;

- current는 아까 넣어둔 next값인 2를 넣어준다.

 

현재 current 값은 2

아직 current는 null값이 아니다 한번 더 while문은 실행 된다.

 

next = current.next;

- 이제 current는 2이다. current.next는 3을 바라보고 있다. 3을 next에 넣어준다.

current.next = prev;

- prev는 1이였다. 2를 1로 연결시켜준다.

- 현재 연결리스트 값 2 → 1 → null

prev = current;

- prev는 현재 current인 2를 넣어준다.

current = next;

- next에 넣어둔 3을 current로 넣어준다.

 

현재 current 값은 3

아직 current는 null값이 아니다 한번 더 while문은 실행 된다.

 

next = current.next;

- 3의 next는 null이다. null을 next에 넣어준다.

current.next = prev;

- prev는 2였다. 3을 2로 연결시켜준다.

- 현재 연결리스트 값 3 → 2 → 1 → null

prev = current;

- current값인 3을 prev에 넣어준다.

current = next;

- current는 null이다.

 

현재 current 값은 null

아직 current는 null값이다. while문은 종료 된다.

 

prev값인 3을 ll.head로 마지막으로 할당시킨다.

 

이렇게 출력하면 head → 3 → 2 → 1 → null 역순한 연결리스트를 완성시킬 수 있다.

 

 

다시한번 이해하기 위해서 그림으로 정리하였다!

후 이제는 이해했다..

이해하고 나서 문제를 풀때 더 응용을 할 수 있어야할텐데..

next를 통해서 연결리스트의 부분들을 잃어버리지 않고 자리를 옮겨가며 순서를 바꾸는게 중요한 문제였던것 같다.

연결리스트는 아직도 적응이 잘 되지를 않는다... 연결리스트 문제들도 계속 풀어보도록 해야겠다..!