指针和地址是强相关的,但是两个概念,指针可以为nullptr或指向特定的地址
构造:
只初始化(没有new或malloc,没有指向初始地址)时,为nullptr.
new或malloc后,就已经分配了内存,地址赋给了指针
析构:
1.指针指向的地址可以被改变,但对于以前指向的地址如果是new或malloc出来的,需要delete或者free
例:删除结点时,需要先将需要删除的结点暂存,然后将下一个结点赋给当前结点,之后再删除结点
https://blog.youkuaiyun.com/weixin_39916039/article/details/82146763
void RemoveNode(ListNode* Head, int value)
{
if (Head == nullptr)
return;
ListNode *DeleteNode = nullptr;
if (Head->value == value)
{
DeleteNode = Head;
Head = Head->next;
}
else
{
ListNode *pNode = Head;
while (pNode->next != nullptr&&pNode->next->value != value)
{
pNode = pNode->next;
}
if (pNode->next != nullptr&&pNode->next->value == value)
{
DeleteNode = pNode->next;
pNode->next = pNode->next->next;
}
}
if (DeleteNode != nullptr)
{
delete DeleteNode;
DeleteNode = nullptr;
}
}
//删除结点
int deleteLinkList(LinkNode* pHeader,int val)
{
if (pHeader == NULL)
{
return 0;
}
LinkNode* pre = pHeader;
LinkNode* cur = pHeader->next;
while (cur != NULL)
{
if (cur->data == val)
{
break;
}
pre = pre->next;
cur = cur->next;
}
if (cur != NULL)
{
pre->next = cur->next;
free(cur);
cur = NULL;
}
return 1;
}
2.析构时,地址delete(free),指针指向nullptr