Leetcode/LeetCode75

[Linked List][Medium] 2095. Delete the Middle Node of a Linked List

자전거통학 2023. 12. 16. 03:39

https://leetcode.com/problems/delete-the-middle-node-of-a-linked-list/description

 

Delete the Middle Node of a Linked List - LeetCode

Can you solve this real interview question? Delete the Middle Node of a Linked List - You are given the head of a linked list. Delete the middle node, and return the head of the modified linked list. The middle node of a linked list of size n is the ⌊n /

leetcode.com

 

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;
}