将有序链表去重的C++解法转换为Rust实现(自定义链表)
Rust 实现删除排序链表中的重复元素
首先定义链表节点结构:
#[derive(PartialEq, Eq, Clone, Debug)] struct Node { val: i32, next: Option<Box<Node>>, }
对应的解法实现:
struct Solution; impl Solution { fn delete_duplicates(mut head: Option<Box<Node>>) -> Option<Box<Node>> { let mut current = head.as_mut(); while let Some(node) = current { // 检查当前节点的下一个节点是否存在且值重复 if let Some(next_node) = &mut node.next { if next_node.val == node.val { // 移除重复节点:将当前节点的next替换为下下个节点 node.next = next_node.next.take(); // 不移动current,继续检查新的next节点 continue; } } // 无重复,移动current到下一个节点 current = node.next.as_mut(); } head } }
关键细节说明
- 使用
as_mut()获取可变引用,允许修改链表节点的next字段 while let Some(node) = current循环遍历链表,直到current变为None- 发现重复节点时,调用
take()获取下下个节点的所有权,赋值给当前节点的next,原重复节点会被Rust自动回收 - 无重复时,将
current移动到下一个节点的可变引用
内容的提问来源于stack exchange,提问作者William Andrés Rodríguez Borja
相关产品推荐
相关产品推荐

