[闲聊] 每日leetcode 75 - Day11

楼主: yam276 ('_')   2025-06-13 18:38:17
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
}
}

Links booklink

Contact Us: admin [ a t ] ucptt.com