일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래머스
- 리액트쿼리
- til
- NPM
- 자바스크립트코딩테스트
- 제로베이스
- Next.js13
- leetcode문제풀이
- next13
- 자바스크립트 문제풀이
- 자바스크립트 문제
- JavaScript
- stack문제
- 리액트
- 자바스크립트 알고리즘 문제
- HTML
- 자바스크립트 알고리즘
- CSS
- 자바스크립트 연결리스트
- JS
- Baekjoon
- leetcode
- 자바스크립트
- 타입스크립트
- 알고리즘문제풀이
- lodash
- 프론트엔드
- Next
- react
- 자바스크립트 문제 풀이
- Today
- Total
코드노트
연결리스트 역순 출력, 반대로 연결 이해하기, 자바스크립 본문
문제는 간단하다
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를 통해서 연결리스트의 부분들을 잃어버리지 않고 자리를 옮겨가며 순서를 바꾸는게 중요한 문제였던것 같다.
연결리스트는 아직도 적응이 잘 되지를 않는다... 연결리스트 문제들도 계속 풀어보도록 해야겠다..!
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
Leetcode Merge Two Sorted Lists 두 개의 정렬된 목록 병합 문제풀이, (0) | 2022.09.14 |
---|---|
원형 연결리스트 알고리즘 문제 풀이 (0) | 2022.09.14 |
leetcode 자바스크립트 문제 풀이 Valid Parentheses 유효한 괄호 (0) | 2022.09.09 |
자바스크립트 연결리스트 열차연결 문제풀이 (0) | 2022.09.09 |
자바스크립트 접두사 구하기 문제풀이 (0) | 2022.09.08 |