精華區beta Marginalman 關於我們 聯絡資訊
※ 引述《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