《新手》数据结构单链表删除问题

Kingke06 2018-01-22 03:10:49
问题:为什么要引入q的存在,直接进行p-next-next不可以吗?

/*单链表的删除*/
/*操作结果:删除L中的第i个结点,并用e返回其值,L的长度减一*/
Status ListDelete(LinkList *L,int i,ElemType *e) {
int j = 1;
LinkList p, q;
p = *L;//赋给头结点,供后续遍历
while (p&&j < i) {
p = p->next;
j++;
}
if (!p || j > i)
return ERROR;//第i个结点不存在
/* q = p->next;
p->next = q->next;
*e = q->data;
free(q);——问题:为什么要引入q的存在,直接进行p-next-next不可以吗?
*/
p->next = p->next->next;
*e = p->data;
return OK;
...全文
376 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kingke06 2018-01-22
  • 打赏
  • 举报
回复
引用 7 楼 paschen 的回复:
引用 5 楼 Kingke06 的回复:
引用 4 楼 paschen 的回复:
引用 2 楼 Kingke06 的回复:
引用 1 楼 paschen 的回复:
q是为了记录p->next之前的值,以便于之后free,不使用q你p->next的已经改变了,free的是改变后的
我理解的删除其实是两种情况,一个是将该元素脱离出表,但是元素仍然存在于内存中。另一个是将该元素从表内剔除,并在内存中删除。那么引入q其实是为了对这个剔除了的元素进行内存释放?是这样的原因吗?
是的,为了释放它指向的内存,即free(q);
那请问如果不对其进行操作的话,该结点所占的内存会一直占用下去吗?去向是何处呢?
一直不被释放,直到程序结束
好的好的,谢谢啦
paschen 2018-01-22
  • 打赏
  • 举报
回复
引用 5 楼 Kingke06 的回复:
引用 4 楼 paschen 的回复:
引用 2 楼 Kingke06 的回复:
引用 1 楼 paschen 的回复:
q是为了记录p->next之前的值,以便于之后free,不使用q你p->next的已经改变了,free的是改变后的
我理解的删除其实是两种情况,一个是将该元素脱离出表,但是元素仍然存在于内存中。另一个是将该元素从表内剔除,并在内存中删除。那么引入q其实是为了对这个剔除了的元素进行内存释放?是这样的原因吗?
是的,为了释放它指向的内存,即free(q);
那请问如果不对其进行操作的话,该结点所占的内存会一直占用下去吗?去向是何处呢?
一直不被释放,直到程序结束
Kingke06 2018-01-22
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
引用 2 楼 Kingke06 的回复:
引用 1 楼 paschen 的回复:
q是为了记录p->next之前的值,以便于之后free,不使用q你p->next的已经改变了,free的是改变后的
我理解的删除其实是两种情况,一个是将该元素脱离出表,但是元素仍然存在于内存中。另一个是将该元素从表内剔除,并在内存中删除。那么引入q其实是为了对这个剔除了的元素进行内存释放?是这样的原因吗?
是的,为了释放它指向的内存,即free(q);
那请问如果不对其进行操作的话,该结点所占的内存会一直占用下去吗?去向是何处呢?
纹枰老妖 2018-01-22
  • 打赏
  • 举报
回复
好的程序员,在堆中使用过的内存,都要释放掉的,C语言用free,C++用delete
paschen 2018-01-22
  • 打赏
  • 举报
回复
引用 2 楼 Kingke06 的回复:
引用 1 楼 paschen 的回复:
q是为了记录p->next之前的值,以便于之后free,不使用q你p->next的已经改变了,free的是改变后的
我理解的删除其实是两种情况,一个是将该元素脱离出表,但是元素仍然存在于内存中。另一个是将该元素从表内剔除,并在内存中删除。那么引入q其实是为了对这个剔除了的元素进行内存释放?是这样的原因吗?
是的,为了释放它指向的内存,即free(q);
赵4老师 2018-01-22
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
Kingke06 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
q是为了记录p->next之前的值,以便于之后free,不使用q你p->next的已经改变了,free的是改变后的
我理解的删除其实是两种情况,一个是将该元素脱离出表,但是元素仍然存在于内存中。另一个是将该元素从表内剔除,并在内存中删除。那么引入q其实是为了对这个剔除了的元素进行内存释放?是这样的原因吗?
paschen 2018-01-22
  • 打赏
  • 举报
回复
q是为了记录p->next之前的值,以便于之后free,不使用q你p->next的已经改变了,free的是改变后的

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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