精華區beta Marginalman 關於我們 聯絡資訊
2095. Delete the Middle Node of a Linked List 題目: 把一個 LinkedList 中間某 Node 變不見 讓他頭尾接上 思路: 又到了 Rust 處理最麻煩的部分了 要注意: let mut cur = &mut head; 等價的是: ListNode** cur = &head; 此時 cur 是指標的指標 可以改 Option 本身 (Some → None / Some → Some(...)) 如果你用: let mut cur = head.as_mut(); 等價的是: ListNode* cur = head ? head : nullptr; 此時 cur 是 單指標 指向 heap 上的 Node 你只能改 Node 裡面的 val / next 不能改 Option 本身 剩下就是題目本身 先一輪找 Middle 再一輪找 Middle 前一位 然後跳過 Middle 用的是 .take().unwrap().next 拿走所有全 之後失去主人的流浪動物會被抓走 不用自己清理 Code: impl Solution { pub fn delete_middle(mut head: Option<Box<ListNode>>) -> Option<Box<ListNode>> { let mut list_len = 0; let mut cur_node = head.as_ref(); while let Some(node) = cur_node { list_len += 1; cur_node = node.next.as_ref(); } if list_len == 1 { return None; } let mut cur_node = &mut head; for i in 0..list_len / 2 { cur_node = &mut cur_node.as_mut().unwrap().next; } *cur_node = cur_node.take().unwrap().next; head } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.143.172 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1749811099.A.DF5.html ※ 編輯: yam276 (60.248.143.172 臺灣), 06/13/2025 18:54:53