只能说Rust链表题的画风和C++完全不一样,作为新手一时间还不太适应,于是单独为链表、智能指针开一篇,主要记录leetcode相关题型的答案以及注意事项。
⭐️两个注意点
里面有官方提供的单链表的实现,可以参考下;
遍历链表可以用loop+match模式匹配的方式
// Definition for singly-linked list.
#[derive(PartialEq, Eq, Clone, Debug)]
pub struct ListNode {
pub val: i32,
pub next: Option<Box<ListNode>>
}
impl ListNode {
#[inline]
fn new(val: i32) -> Self {
ListNode {
next: None,
val
}
}
}
impl Solution {
pub fn add_two_numbers(l1: Option<Box<ListNode>>, l2: Option<Box<ListNode>>) -> Option<Box<ListNode>> {
let mut t = (l1, l2, 0, 0);
let mut result = None;
let mut tail = &mut result;
loop {
t = match t {
(None, None, _, 0) => break,
(Some(l1), Some(l2), _, mut carry) => {
let temp = l1.val + l2.val + carry;
let res_temp = temp % 10;
carry = temp / 10;
(l1.next, l2.next, res_temp, carry)
}
(Some(l), None, _, mut carry) | (None, Some(l), _, mut carry) => {
let temp = l.val + carry;
let res_temp = temp % 10;
carry = temp / 10;
(l.next, None, res_temp, carry)
}
(None, None, _, carry) => {
(None, None, carry, 0)
}
};
*tail = Some(Box::new(ListNode::new(t.2)));
tail = &mut tail.as_mut().unwrap().next;
}
result
}
}
#[inline] 是什么?
是Rust 中的一个属性,用于提示编译器尝试对函数进行内联展开优化。 内联展开是一种优化技术,可以将函数调用的地方替换为函数体的内容,减少了函数调用的开销,提高代码的执行速度。 通过在函数定义之前使用 #[inline] 属性,你可以向编译器发出建议,让它在合适的情况下尝试内联展开函数。