https://leetcode.com/problems/delete-the-middle-node-of-a-linked-list/description
Q. List의 중앙 노드를 삭제하라. 노드수가 짝수일때는 두 중앙 노드 중 뒷 노드를 삭제하라.
Solution.
단일 리스트의 중앙을 찾는 문제는 매우 흔하다. 이것과 단일 리스트 삭제연산 수행을 보는 문제.
중앙은 보통 fast, slow 노드를 활용하여 찾는데, loop 정지 조건은 외워두는게 편하다.
삭제 시, 이전 노드, 이후 노드가 NULL일 경우에 조금 유의 한다.
ListNode* deleteMiddle(ListNode* head)
{
if (head == NULL) return NULL;
ListNode* fast = head;
ListNode* slow = head;
ListNode* prev = NULL;
while (fast != NULL && fast->next != NULL)
{
prev = slow;
slow = slow->next;
fast = fast->next->next;
}
// delete.
if (slow != NULL)
{
if (prev == NULL) head = NULL;
else prev->next = slow->next;
}
else
prev->next = NULL;
return head;
}
'Leetcode > LeetCode75' 카테고리의 다른 글
[Linked List][Easy] 206. Reverse Linked List (0) | 2023.12.18 |
---|---|
[Linked List][Medium] 328. Odd Even Linked List (1) | 2023.12.17 |
[Stack][Medium] 735. Asteroid Collision (0) | 2023.12.12 |
[Stack][Medium] 2390. Removing Stars From a String (0) | 2023.12.12 |
[HashMap/Set][Medium] 2352. Equal Row and Column Pairs (0) | 2023.12.11 |