struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
void deleteNode(ListNode* node) {
*(node) = *(node->next);
}
我知道这将是结果
node = 3
deleteNode(节点)
1-> 2-> 3-> 4-> 5
1-> 2-> 4-> 5
但是这将导致内存泄漏的地方,指针将指向新节点,但是int变量3仍会在内存中的某个位置浮动吗?谢谢!
答案 0 :(得分:1)
但这会导致内存泄漏
是的
但是int变量3仍会在内存中的某个位置浮动吗?
不。包含4的节点是泄漏的节点,因为它是包含3的节点被覆盖了,也就是指向4的节点。结果将是这样的:
4 <--- this is the node which was leaked (since nothing points to it)
\
->5
/
1->2->4 <--- this is the node that used to contain 3
答案 1 :(得分:0)
不可能摆脱节点中没有指向其前任节点的指针的情况。
您可以做的是将->data
和->next
从node->next
移到node
并摆脱node->next
。它将几乎与请求的内容相同-删除存储在node->data
中的数据,并使列表更短一个元素。
步骤:
node->data
tmp = node->next
node->next = tmp->next; node->data = tmp->data
tmp
和代码(尚未尝试编译):
node->val = 42; // dispose of node own data (not required for RAII fields)
ListNode* tmp = node->next;
*(node) = *(node->next);
delete tmp;