중간에 낀 노드 삭제하기 — 5지 선다형. 초간단 딜리트 문제—링크드 리스트일 경우.

76.***.207.158

문제를 간략히 정리하자면, 사실 이건 리트코드 #237과 관련있는데…
크게 두가지 개략적 솔루션을 생각해볼수 있어요.


솔루션 1:
void deleteNode(ListNode* node) {
        
        ListNode *temp = node->next;
        *node = *temp;
        temp->next = NULL; 
        delete temp;
    }

솔루션 2: ==> 결국 메모리삭제도 요구되면 잘못된 솔루션? .  
void deleteNode(ListNode* node) {       // 메모리 리크 문제 없나?
    node->val = node->next->val;
    node->next = node->next->next;
  }

솔루션2는 포인터를 1개만 쓴경우죠. 이 경우, 메모리리크 문제가 생기는거 같은데…솔루션1의 경우 템프처럼 node 말고 다른 포인터를 꼭 도입해야만 메모리를 삭제시킬수 있을까 그냥 메모리리크 문제 해결하는 방법이 없는가가 문제의 모티브입니다. 보통 여분의 포인터 도입 않하고도 문제가 해결할수있는 방법이 많은데 메모리리크를 고려해야 한다면 여분의 포인터를 도입하는게 정석일까….이런 생각….