作者buyfood (buyfood)
看板Programming
标题[问题] Leetcode 19 removeNthFromEnd
时间Fri Feb 23 17:25:05 2024
各位高手大家好,今天练习这题时有些疑惑想请教
题目:
https://leetcode.com/problems/remove-nth-node-from-end-of-list/descripti
on/
一开始写出的做法如下:
```
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
static int i = 0;
if (head->next != NULL)
{
head->next = removeNthFromEnd(head->next, n);
}
i++;
if (n == i)
{
return head->next; // skip yourself
}
else
{
return head;
}
}
};
```
在Leetcode上无法通过([1], 1)与([1,2], 1)这两个测试
回传结果是[1]与[1,2],也就是并没有成功移除node
我知道这段code并没有实际删除node,只是忽略掉
但走访起来应该跟正确答案相符,且在vs上测试可以得到正确答案
目前已知:
1. 不建议用static变数
2. 会有mem leak的问题
但神奇的事情发生了,我把static换成call by reference的做法,就通过leetcode的测
试了?!?
```
class Solution {
public:
ListNode* removeNthFromEnd2(ListNode* head, int& n) {
if (head->next != NULL)
{
head->next = removeNthFromEnd2(head->next, n);
}
n--;
if (n == 0)
{
return head->next; // skip yourself
}
else
{
return head;
}
}
ListNode* removeNthFromEnd(ListNode* head, int n) {
return removeNthFromEnd2(head, n);
}
};
```
我觉得这两段code执行起来逻辑相同,
是不是有什麽盲点?
另外有没有可能维持这个逻辑,但解决mem leak的问题呢?
恳请大大们解惑
-----
Sent from MeowPtt on my Pixel 6
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.72.118.225 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1708680307.A.B79.html
1F:→ lycantrope: 要不要先用python3写对,再去想c++ 133.106.37.183 02/23 17:56
2F:推 LPH66: 你不能假设你的函数只被测试程式呼叫一次123.194.181.180 02/23 19:38
3F:→ LPH66: static 变数只会初始化一次, 再次呼叫时123.194.181.180 02/23 19:39
4F:→ LPH66: 不会再去清一次零; 第二种写法你用额外变数123.194.181.180 02/23 19:40
5F:→ LPH66: 没有使用 static 就不会有这问题123.194.181.180 02/23 19:41
6F:→ buyfood: 对耶,呼叫多次就错了,感谢指出 42.72.118.225 02/23 21:25