문제를 간략히 정리하자면, 사실 이건 리트코드 #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 말고 다른 포인터를 꼭 도입해야만 메모리를 삭제시킬수 있을까 그냥 메모리리크 문제 해결하는 방법이 없는가가 문제의 모티브입니다. 보통 여분의 포인터 도입 않하고도 문제가 해결할수있는 방법이 많은데 메모리리크를 고려해야 한다면 여분의 포인터를 도입하는게 정석일까….이런 생각….