연결리스트 역순 출력, 반대로 연결 이해하기, 자바스크립
문제는 간단하다
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를 통해서 연결리스트의 부분들을 잃어버리지 않고 자리를 옮겨가며 순서를 바꾸는게 중요한 문제였던것 같다.
연결리스트는 아직도 적응이 잘 되지를 않는다... 연결리스트 문제들도 계속 풀어보도록 해야겠다..!