[問題] Leetcode 19 removeNthFromEnd
各位高手大家好,今天練習這題時有些疑惑想請教
題目: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://www.ptt.cc/bbs/Programming/M.1708680307.A.B79.html
→
02/23 17:56,
10月前
, 1F
02/23 17:56, 1F
推
02/23 19:38,
10月前
, 2F
02/23 19:38, 2F
→
02/23 19:39,
10月前
, 3F
02/23 19:39, 3F
→
02/23 19:40,
10月前
, 4F
02/23 19:40, 4F
→
02/23 19:41,
10月前
, 5F
02/23 19:41, 5F
→
02/23 21:25,
10月前
, 6F
02/23 21:25, 6F
Programming 近期熱門文章
PTT數位生活區 即時熱門文章