File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed
remove-nth-node-from-end-of-list Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * 문제 설명
3+ * - 연결 리스트의 "끝"에서 n번째 노드를 제거하는 문제
4+ *
5+ * 아이디어
6+ * 1) 투 포인터 기법 ⚠️
7+ * - fast, slow 포인터간의 간격을 n + 1만큼 벌리면 fast 포인터가 끝에 도달했을 경우, slow 포인터를 활용하여 제거 가능하다.
8+ * - 주의할점은 노드가 하나만 존재하는 케이스를 대응하기 위해 더미 노드를 사용한다.
9+ *
10+ */
11+ /**
12+ * Definition for singly-linked list.
13+ * class ListNode {
14+ * val: number
15+ * next: ListNode | null
16+ * constructor(val?: number, next?: ListNode | null) {
17+ * this.val = (val===undefined ? 0 : val)
18+ * this.next = (next===undefined ? null : next)
19+ * }
20+ * }
21+ */
22+
23+ class ListNode {
24+ val : number ;
25+ next : ListNode | null ;
26+ constructor ( val ?: number , next ?: ListNode | null ) {
27+ this . val = val === undefined ? 0 : val ;
28+ this . next = next === undefined ? null : next ;
29+ }
30+ }
31+
32+ function removeNthFromEnd ( head : ListNode | null , n : number ) : ListNode | null {
33+ let dummy = new ListNode ( 0 , head ) ;
34+ let fast : ListNode | null = dummy ;
35+ let slow : ListNode | null = dummy ;
36+
37+ for ( let i = 0 ; i < n + 1 ; i ++ ) {
38+ fast = fast ! . next ;
39+ }
40+
41+ while ( fast ) {
42+ fast = fast . next ;
43+ slow = slow ! . next ;
44+ }
45+
46+ slow ! . next = slow ! . next ! . next ;
47+ return dummy . next ;
48+ }
You can’t perform that action at this time.
0 commit comments