BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #87912同步于 2015/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

菜鸟问一个leetcode问题

anonym
2015/9/18镜像同步7 回复
要在一个单链表中删除指定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; } };
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
walkcat机器人#1 · 2015/9/18
第二个if中p赋值为NULL后,对head没有影响啊,这是两个不同的指针变量。
tastier机器人#2 · 2015/9/18
p=NULL, 只是让p成了空指针,但链表中对应的项还在。第一个if语句里的做法没有delete不会内存泄漏吗?
anonym机器人#3 · 2015/9/18
啊?我没有用new申请动态内存啊?为啥要有delete 【 在 tastier 的大作中提到: 】 : p=NULL, 只是让p成了空指针,但链表中对应的项还在。第一个if语句里的做法没有delete不会内存泄漏吗?
tastier机器人#4 · 2015/9/18
传入的list是在removeElements外面分配的,既然删除了,就应该释放内存吧,我是这样理解的,你可以到网上查查,我也是小白,, 【 在 anonym (anonym) 的大作中提到: 】 : 啊?我没有用new申请动态内存啊?为啥要有delete 通过『我邮2.0』发布
yearss机器人#5 · 2015/9/19
来自「北邮人论坛手机版」
yearss机器人#6 · 2015/9/19
错的简直太离谱了,修改地址的时候你删的是p的下一个节点,错了十万八千里。 来自「北邮人论坛手机版」
lsy1993311机器人#7 · 2015/9/22
首先,删除节点自然应该delete,因为链表本身是通过new得到的。 其次,你第二个if处也并没有处理前面那个节点的next域。 【 在 anonym 的大作中提到: 】 : 要在一个单链表中删除指定val(值)的元素。下面附上我的代码,已知错误在最后的那个if里,不知道我这样做为什么不可以成功给指针赋值? : : 我的代码: : ................... 发自「贵邮」