237. Delete Node in a Linked List的C++解法

xiaoxiao2021-02-28  120

想了好久都没看懂题目,感觉单向链表只给出当前节点的话是没有办法删除此节点的,然后看了题解,感觉不知道谁比较蠢。。。

 

class Solution { public: void deleteNode(ListNode* node) { node->val = node->next->val; node->next = node->next->next; } };

题解给的方法并没有删除这个节点,会造成内存泄漏。实际在单链表中删除一个节点需要链表的头,找到这个节点的前一个节点然后使用delete或者free进行删除操作。或者将这个节点换成下个节点的值,删除下个节点:

class Solution { public: void deleteNode(ListNode * node) { ListNode *temp=node->next; node->val=temp->val; node->next=temp->next; delete temp; } };

 

查了一下delete和free的区别:

1. delete用于释放 new 分配的空间,free用于释放malloc分配的空间。

2. delete [] 用于释放 new [] 分配的空间。

3. delete 释放空间的时候会调用 相应对象的析构函数。new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存。

4. 调用free之前需要检查要释放的指针是否为NULL,使用delete 释放内存则不需要检查指针是否为NULL。

5. free和delete不能混用,也就是说new分配的内存空间不要使用free来释放,malloc分配的空间也不要使用delete来释放。

 

转载请注明原文地址: https://www.6miu.com/read-36702.html

最新回复(0)