我不明白这段代码如何删除节点,请帮忙!!!
Node* del_place(Node* L, int S)
{
int i=1;
Node *p=L;
while (p!=NULL&&i!=S-1)
{
p=p->next;
i++;
}
p->next=p->next->next;//why can this code delete node in L...
return L;
}
答案 0 :(得分:1)
让我们来看看这个功能是做什么的。它需要两个参数,链表和要删除的项的索引。
首先,它搜索正确的节点:
p是链表的第一项。它开始单步执行列表,直到找到正确的索引(i=S-1
)或直到达到列表的末尾(p=NULL
)。
当找到正确的节点时,它会将指向下一个项目p-> next
的链接设置为下一个项目的下一个项目。
现在,您还可以看到函数中的问题:
答案 1 :(得分:1)
该行实际上并未从内存中删除Node
。它将其从链表中删除。
代码会使您当前的Node
(p
)指向右侧的第二个Node
,而不是右侧的第一个Node
。
此代码有几个问题:
p->next=p->next->next;
未从内存中删除而导致潜在的内存泄漏p
之前进行一些检查,否则当p->next
或NULL
最终成为L
时,您可能会遇到一些未定义的行为。例如S
为NULL,<div class="col-md-4 col-sm-12">
<div class="contact-form bottom">
<h2>Send a message</h2>
<form id="main-contact-form" name="contact-form" method="POST" action='http://creobox.ie/site/sendemail.php'>
<div class="form-group">
<input type="text" name="name" class="form-control" required="required" placeholder="Name">
</div>
<div class="form-group">
<input type="email" name="email" class="form-control" required="required" placeholder="Email Id">
</div>
<div class="form-group">
<textarea name="message" id="message" required="required" class="form-control" rows="8" placeholder="Your text here"></textarea>
</div>
<div class="form-group">
<input type="submit" name="submit" class="btn btn-submit" value="Submit">
</div>
</form>
</div>
</div>
&gt;链表的大小......