作者fxfxxxfxx (愛麗絲)
看板Marginalman
標題Re: [閒聊] 每日LeetCode
時間Thu Oct 13 12:17:26 2022
※ 引述《Rushia (みけねこ的鼻屎)》之銘言:
: 237. Delete Node in a Linked List
: 給予一個node,從該鏈結串列刪除這個node的值。
因為今天的每日一題很無聊,我們來玩一點好玩的
如果有曾經亂試一堆奇怪的東西的話
應該會發現Leetcode(在C++)的做法是把你的code直接接上他底下的code
例如如果在最後一行加上
#define main foo
會噴出
ld.lld: error: undefined symbol: main
因為main被我們改成foo了他找不到進入點
經過一陣亂試之後,可以發現他是這樣call我們的deleteNode
class __DriverSolution__ {
public:
void __helper__(ListNode* node, int n) {
while (node) {
if (node->val == n) {
break;
}
node = node -> next;
}
Solution.deleteNode(
node
);
}
/* omitted */
}
int main() {
/* omitted */
__DriverSolution__().__helper__(
param_1, param_2
);
/* omitted */
}
這也是為什麼他會規定值是distinct的原因:
他是用值來辨別一個node
於是我們可以做很無聊的事:
在最底下加上
#define __DriverSolution__() Solution()
這樣之後他call __helper__的時候就會call到我們的Solution裡
我們再自己寫一個__helper__
就可以變成跟普通一樣在list裡刪除特定val的問題
可以用 node->next = node->next->next
而不必彆扭的改node裡的值
class Solution {
public:
void __helper__(ListNode*& node, int n) {
ListNode *dummy = new ListNode { 1001, node };
ListNode *ptr = dummy;
while (ptr->next->val != n) {
ptr = ptr->next;
}
ptr->next = ptr->next->next;
node = dummy->next;
}
void deleteNode(ListNode*) {}
};
#define __DriverSolution__() Solution()
實際丟上去也可以AC
好玩而已,沒什麼意義 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.16.175 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1665634648.A.91D.html
推 Rushia: 靠北 10/13 12:18
→ dannyko: 資安大師 10/13 12:22
→ hduek153: 大師 10/13 12:29
推 iLeyaSin365: 跨某 10/13 12:29
推 abcd991276: 大師 10/13 12:46
推 pandix: 大師 10/13 13:14