由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - c/c++ double pointer研究
相关主题
弱问一个小问题,leetcode 上merge sorted listLeast Common Ancester算法最优解
How can one determine whether a singly linked list has a cycle?问一个题目
请教一道单链表问题A onsite被拒,面经,求分析失败原因
那个双堆求median的能不能这样做?150上这个是不是不对? (转载)
[emc/greenplum面试]senior engineer一道挺简单的题给搞砸了
今天计划做20题面试的时候 binary tree的delete也要15分钟之内写完么?
leetcode过的一代工程师问个二叉树删除结点的问题
问最小窗口覆盖的面试题问个reverse linked list
相关话题的讨论汇总
话题: lpp话题: listnode话题: currvalue话题: pointer话题: next
进入JobHunting版参与讨论
1 (共1页)
m********c
发帖数: 105
1
昨天发了一个pure storage的题目,发现用double pointer非常容易做。今天认认真真
研究了一下double pointer,感觉虽然不容易掌握,但是掌握了它就很强大。
做leetcode题目Remove Duplicates from Sorted List II时,正好就用上了,下面是
我用double pointer的实现。
ListNode *deleteDuplicates(ListNode *head) {

ListNode **lpp = &head;
int currValue = INT_MAX;
while (*lpp) {
if ((*lpp)->val == currValue) {
*lpp = (*lpp)->next;
}
else if ((*lpp)->next && (*lpp)->val == (*lpp)->next->val) {
currValue = (*lpp)->val;
*lpp = (*lpp)->next;
}
else
lpp = &(*lpp)->next;
}
return head;
}
上面代码,不满意的地方是多用了一个变量currValue,这个是用来删除每个duplicate
elements中的最后一个。暂时还没有想到可以去掉它的方法。
b**********5
发帖数: 7881
2
你这个code, 通过了test么?
m********c
发帖数: 105
3
通过了,60ms

【在 b**********5 的大作中提到】
: 你这个code, 通过了test么?
k******4
发帖数: 94
4
如果第一个元素值是int_max怎么办?还有就是这个难道不是内存泄漏了?
m********c
发帖数: 105
5
如果第一个是INT_MAX的话,这个确实不行,这也是我对这个code不满意的地方。
内存泄露也有可能,但是对于这个函数,我们不知道head以及其他next节点是不是new
的,所以没办法决定是否用delete去删除。
有更好的可以确保内存不会泄漏的方法吗?

【在 k******4 的大作中提到】
: 如果第一个元素值是int_max怎么办?还有就是这个难道不是内存泄漏了?
w*****e
发帖数: 931
6
第一行有个typo, ListNode **lpp。还有你这个没有用delete会有内存泄露吧。

duplicate

【在 m********c 的大作中提到】
: 昨天发了一个pure storage的题目,发现用double pointer非常容易做。今天认认真真
: 研究了一下double pointer,感觉虽然不容易掌握,但是掌握了它就很强大。
: 做leetcode题目Remove Duplicates from Sorted List II时,正好就用上了,下面是
: 我用double pointer的实现。
: ListNode *deleteDuplicates(ListNode *head) {
:
: ListNode **lpp = &head;
: int currValue = INT_MAX;
: while (*lpp) {
: if ((*lpp)->val == currValue) {

m********c
发帖数: 105
7
嗯,疏忽,竟然把那个写错了,多谢提醒!
内存泄露是有可能,但是我们不知道head是不是通过new创建的。比如下面的例子。
在函数里,*lpp = (*lpp)->next, 之前加上 delete *lpp
如下定义这个list node,
ListNode node1(1);
ListNode node2(1);
node1.next = &node2;
duplicateNode(&node1)的话就会报错,pointer being freed was not allocated

【在 w*****e 的大作中提到】
: 第一行有个typo, ListNode **lpp。还有你这个没有用delete会有内存泄露吧。
:
: duplicate

g**4
发帖数: 863
8
没仔细看你的代码
leetcode里面double pointer我都是这样做的:
ListNode* newHead = NULL;
ListNode** dp = &newHead;
...
return newHead;

【在 m********c 的大作中提到】
: 昨天发了一个pure storage的题目,发现用double pointer非常容易做。今天认认真真
: 研究了一下double pointer,感觉虽然不容易掌握,但是掌握了它就很强大。
: 做leetcode题目Remove Duplicates from Sorted List II时,正好就用上了,下面是
: 我用double pointer的实现。
: ListNode *deleteDuplicates(ListNode *head) {
:
: ListNode **lpp = &head;
: int currValue = INT_MAX;
: while (*lpp) {
: if ((*lpp)->val == currValue) {

p****U
发帖数: 109
9
赞lz。 等下我也去写一个
d****n
发帖数: 1241
10
想到这个例子:
http://grisha.org/blog/2013/04/02/linus-on-understanding-pointe
当时在hackernews上讨论还颇为激烈。

【在 m********c 的大作中提到】
: 昨天发了一个pure storage的题目,发现用double pointer非常容易做。今天认认真真
: 研究了一下double pointer,感觉虽然不容易掌握,但是掌握了它就很强大。
: 做leetcode题目Remove Duplicates from Sorted List II时,正好就用上了,下面是
: 我用double pointer的实现。
: ListNode *deleteDuplicates(ListNode *head) {
:
: ListNode **lpp = &head;
: int currValue = INT_MAX;
: while (*lpp) {
: if ((*lpp)->val == currValue) {

1 (共1页)
进入JobHunting版参与讨论
相关主题
问个reverse linked list[emc/greenplum面试]senior engineer
CCI 4.2 答案是不是错了,不是一次bfs 而是要 2次 dfs的今天计划做20题
报Google Offer并请教面试题leetcode过的一代工程师
合并两个排序好的链表, 优解?问最小窗口覆盖的面试题
弱问一个小问题,leetcode 上merge sorted listLeast Common Ancester算法最优解
How can one determine whether a singly linked list has a cycle?问一个题目
请教一道单链表问题A onsite被拒,面经,求分析失败原因
那个双堆求median的能不能这样做?150上这个是不是不对? (转载)
相关话题的讨论汇总
话题: lpp话题: listnode话题: currvalue话题: pointer话题: next