删除链表

cap77 2010-11-17 04:09:36
建的链表有头结点,我把整条链表删除后按如下打印怎么会报错啊?

void Delete(Node *head)
{
Node *temp=head;
Node *pNext=NULL;
if (temp==NULL)
{
cout<<"No head!"<<endl;
return;
}
while (temp!=NULL)
{
pNext=temp;
temp=temp->next;
delete pNext;
pNext=NULL;
}
}

void Print(Node* head)
{
if(head==NULL)
{
cout<<"No Head!"<<endl;
return;
}
Node *temp=head->next;
if (temp==NULL)
{
cout<<"空表"<<endl;
return;
}
while (temp!=NULL)
{
cout<<temp->number<<" ";
temp=temp->next;
}
cout<<endl;
}
...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
k_code_top 2010-12-16
  • 打赏
  • 举报
回复
强贴留言
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 we_sky2008 的回复:]

引用 5 楼 cap77 的回复:
不传指针的引用或者二级指针的话,在函数里面释放内存是不是相当于没释放啊?

内存释放了,删除完整个链表之后head仍旧指向原来链表的头,也就是其值还是第一个节点的地址
[/Quote]


对头!
we_sky2008 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cap77 的回复:]
不传指针的引用或者二级指针的话,在函数里面释放内存是不是相当于没释放啊?
[/Quote]
内存释放了,删除完整个链表之后head仍旧指向原来链表的头,也就是其值还是第一个节点的地址
半斗 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cap77 的回复:]
不传指针的引用或者二级指针的话,在函数里面释放内存是不是相当于没释放啊?
[/Quote]
内存释放了,只不过最后的头结点head的指向不为NULL
cap77 2010-11-17
  • 打赏
  • 举报
回复
不传指针的引用或者二级指针的话,在函数里面释放内存是不是相当于没释放啊?
we_sky2008 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 we_sky2008 的回复:]
楼主试试这样

C/C++ code

void Delete(Node *&head)
{
Node *cur = NULL;
if (head == NULL)
{
cout<<"No head!"<<endl;
return;
}
while (head != NULL)
{
……
[/Quote]
Delete的参数设置为指针的引用
这样在删除链表时,每删除链表头节点时,头结点更新,最后删除完整个链表时,头结点直线NULL
dooX8086 2010-11-17
  • 打赏
  • 举报
回复
删除链表头结点没有 delete, 指针也没有指为 NULL

删除链表后再 print 就会产生溢出错误
we_sky2008 2010-11-17
  • 打赏
  • 举报
回复
楼主试试这样

void Delete(Node *&head)
{
Node *cur = NULL;
if (head == NULL)
{
cout<<"No head!"<<endl;
return;
}
while (head != NULL)
{
cur = head;
head = head->next;
delete cur;
}
}
  • 打赏
  • 举报
回复
    while (temp!=NULL)
{
pNext=temp;
temp=temp->next;
delete pNext;
pNext=NULL;
}

这段代码是要将头结点也要删除的啊!!!
如果head不为NULL的话,那么将会出错。出错原因:delete函数接受的参数只是一个head地址的拷贝,如果删除了head拷贝,并将head赋值为NULL,那么是改变不了实参的head的。
也就是delete中将head指向的内存释放了并且赋值NULL了,但是实参依然指向那块内存,并且不为空!到要print时,由于实参还是指向那块内存(虽然已经释放),此时访问就会报错,因为你已经将它释放了!

如果要删除头结点的话,修改时,应该奖head指针的指针传过去,或者在主调函数中将head释放赋空!

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧