为什么我们在删除之前将链表的下一个指针初始化为NULL



为什么我们在删除前将链表的下一个指针初始化为NULL在删除过程中,我们将头移到下一个节点,并释放第一个节点的内存,因此我们需要在删除之前将已删除节点的下一个指针初始化为NULL。没有它,代码运行时不会出现任何问题。这个悬空指针会产生问题吗?请在里放些光

class Node
{
public:
int data;
Node* next;

Node(int d)     //construtor for storing the value in nodes
{
this->data=d;
this->next=NULL;
}
};
void DeleteAt(int position,Node* &head,Node *&tail)
{
if(position ==1)
{   
Node* temp=head;
head=temp->next;
temp->next=NULL;
delete temp;
}
else
{
Node *curr=head;
Node *prev=NULL;
int cnt=1;
while(cnt<position)
{
prev=curr;
curr=curr->next;
cnt++;
}
// if delete at tail is called ,for updation of tail,
//if required
if(curr->next==NULL)
{
tail=prev;
}
prev->next=curr->next;
curr->next=NULL;
delete curr;
}
}

你不需要这样做,它只是在你学习的时候帮助你。对于老师来说,这样做是为了避免在空闲后使用。这样,很明显您有问题,因为如果您不小心尝试使用刚刚删除的节点,您可能会遇到segfault。

相关内容

  • 没有找到相关文章

最新更新