作者:
yam276 ('_')
2025-06-13 18:38:172095. 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
}
}