C++链表类删除节点的问题

void List::delete_Node(const int pos){ Node *p = this->Head; for (int i = 0;i < pos - 1; ++i) { p = p->next; } p->next = p->next->next; delete p; q = p = nullptr;}
//函数如上
执行结果

而且有16字节的内存泄露
完整代码:http://codepad.org/z8SaSRXz
http://codepad.org/EwSPebht

对于单链表,只能删除p所指结点的下一个结点(即p->next):
q=p->next;
p->next=q->next;

delete q;

不能删除p所指的结点(因为无法使p的前驱结点指向p的后继结点)。追问

您说的没错,代码中p是指向要删除元素的上一个元素,delete的是p->next

追答

可是你的
p->next = p->next->next;
delete p;
删除的是p所指的结点啊。

如果p是指向要删除元素的上一个元素的,则代码应该是这样的:

void List::delete_Node(const int pos)
{
Node *p = this->Head;
for (int i = 0;i next;
}

q = p->next;
p->next = q->next;
delete q;
q = p = nullptr;
}

追问

按你的代码,成功了,内存泄露也解决了,我知道哪里错了,我之前写的是delete p->next;却忘了我已经修改p->next的值了。。。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答