반응형
1. 문제
- 연결 리스트가 주어질 때, 중간 노드를 제외한 리스트를 반환하라.
- 중간 노드는 전체 길이 n/2 위치한다.
2. 해결
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function deleteMiddle(head: ListNode | null): ListNode | null {
let n = 1;
let current = head;
while(current.next) {
n++;
current = current.next;
}
if(n === 1) return null;
let idx = 0;
current = head;
while(current.next && idx < Math.floor(n / 2)- 1) {
current = current.next;
idx++;
}
if(current.next) current.next = current.next.next
return head;
};
- 전체 노드를 순회하면서 길이를 구하고, 다시 한 번 순회해서 중간 노드의 이전 노드를 찾는다.
- 찾은 노드의 next를 갱신.