返回信息流要在一个单链表中删除指定val(值)的元素。下面附上我的代码,已知错误在最后的那个if里,不知道我这样做为什么不可以成功给指针赋值?
我的代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode * & head, int val) {
if(!head) return NULL;
ListNode * p = head;
while(p->next)
{
if(p->val == val)
{
p->val = p->next->val;
p->next = p->next->next;
}
p = p->next;
}
if(p->val == val)
{
p = NULL;
}
return head;
}
};
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #87912同步于 2015/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
菜鸟问一个leetcode问题
anonym
2015/9/18镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
啊?我没有用new申请动态内存啊?为啥要有delete
【 在 tastier 的大作中提到: 】
: p=NULL, 只是让p成了空指针,但链表中对应的项还在。第一个if语句里的做法没有delete不会内存泄漏吗?
传入的list是在removeElements外面分配的,既然删除了,就应该释放内存吧,我是这样理解的,你可以到网上查查,我也是小白,,
【 在 anonym (anonym) 的大作中提到: 】
: 啊?我没有用new申请动态内存啊?为啥要有delete
通过『我邮2.0』发布
首先,删除节点自然应该delete,因为链表本身是通过new得到的。
其次,你第二个if处也并没有处理前面那个节点的next域。
【 在 anonym 的大作中提到: 】
: 要在一个单链表中删除指定val(值)的元素。下面附上我的代码,已知错误在最后的那个if里,不知道我这样做为什么不可以成功给指针赋值?
:
: 我的代码:
: ...................
发自「贵邮」