关于数据结构的删除,有个小问题,好像钻牛角尖了,想不通

小熊之怒 2018-11-21 11:27:12
单链表,删除操作,节点包含value值和next指针。 删除节点一般如下

p->value = p->next->value;
p->next = p->next->next;

用画图实现是这样的:

1和3节点连接,2节点直接被弃用了。但是当初构造时候,2节点是用new或者malloc申请出来的,如果这样写,2节点没有被delete或者free,会造成难以估计的问题。
那么关于这个,要怎么写更好呢?或者怎么做是更好的写法。上面那种是搜了好几篇链表都是基本这样写,以前我也是这样写,不过突然想到了这个问题。
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小熊之怒 2019-09-23
  • 打赏
  • 举报
回复
引用 4 楼 蒋平๑ 的回复:
你是说不能用free吗,


可以,可以,当时想错了。
小熊之怒 2019-09-23
  • 打赏
  • 举报
回复
引用 3 楼 蒋平๑ 的回复:
node* temp = p->next;
p->next = temp ->next;
temp ->next = null;(大写的null)
free(temp);
我也不知道你的节点是什么类型 就随便用了结构体node的指针类型N



嗯嗯,当初想的是删除的那个节点返回给删除操作,如果删除操作不用,就free,和置NULL,如果用就可以让其使用了。
小熊之怒 2019-09-23
  • 打赏
  • 举报
回复
引用 2 楼 滑板男孩 的回复:
[quote=引用 1 楼 小熊之怒的回复:]仔细研究了下,上面问题解决了。如下:

Node* deleteTail(Node* p) //返回删除的节点
{
//头部删除
Node *pTmp = p->Next;
p->Next = pTmp->Next;
return pTmp;
}

不让这个节点为自由节点,用一个指针指向,然后返回这个指针,那么这个节点将不是自由节点。

那这个指针会不会变成自由的指针啊[/quote]

传递回去之后,如果不用,手动置为NULL。就不会变成自由指针了。
肥喵๑ 2019-05-31
  • 打赏
  • 举报
回复
你是说不能用free吗,
肥喵๑ 2019-05-31
  • 打赏
  • 举报
回复
node* temp = p->next; p->next = temp ->next; temp ->next = null;(大写的null) free(temp); 我也不知道你的节点是什么类型 就随便用了结构体node的指针类型N
Python小叮当 2019-02-13
  • 打赏
  • 举报
回复
引用 1 楼 小熊之怒的回复:
仔细研究了下,上面问题解决了。如下:

Node* deleteTail(Node* p) //返回删除的节点
{
//头部删除
Node *pTmp = p->Next;
p->Next = pTmp->Next;
return pTmp;
}

不让这个节点为自由节点,用一个指针指向,然后返回这个指针,那么这个节点将不是自由节点。
那这个指针会不会变成自由的指针啊
小熊之怒 2018-11-21
  • 打赏
  • 举报
回复
仔细研究了下,上面问题解决了。如下:

Node* deleteTail(Node* p) //返回删除的节点
{
//头部删除
Node *pTmp = p->Next;
p->Next = pTmp->Next;
return pTmp;
}

不让这个节点为自由节点,用一个指针指向,然后返回这个指针,那么这个节点将不是自由节点。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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