Redian新闻
>
Ua的gift registry怎么用?
avatar
Ua的gift registry怎么用?# Money - 海外理财
m*c
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中的最后一个。暂时还没有想到可以去掉它的方法。
avatar
E*o
2
之前Amex prg搞了$100gift registry, 在我ld帐户。现在我需要订机票回国,可以用
ld帐户给我出票,用掉那$100的gr吗?
avatar
b*5
3
你这个code, 通过了test么?
avatar
Z*J
4
Yes
avatar
m*c
5
通过了,60ms

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

【在 k******4 的大作中提到】
: 如果第一个元素值是int_max怎么办?还有就是这个难道不是内存泄漏了?
avatar
w*e
8
第一行有个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) {

avatar
m*c
9
嗯,疏忽,竟然把那个写错了,多谢提醒!
内存泄露是有可能,但是我们不知道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

avatar
g*4
10
没仔细看你的代码
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) {

avatar
p*U
11
赞lz。 等下我也去写一个
avatar
d*n
12
想到这个例子:
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) {

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。