Rust踩雷笔记(5)——刷点链表的题(涉及智能指针Box,持续更新)

目录

      • [leetcode 2 两数相加------模式匹配+单链表+Box](#leetcode 2 两数相加——模式匹配+单链表+Box)

只能说Rust链表题的画风和C++完全不一样,作为新手一时间还不太适应,于是单独为链表、智能指针开一篇,主要记录leetcode相关题型的答案以及注意事项。

leetcode 2 两数相加------模式匹配+单链表+Box

⭐️两个注意点

🍉里面有官方提供的单链表的实现,可以参考下;

🍉遍历链表可以用loop+match模式匹配的方式

rust 复制代码
// 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] 属性,你可以向编译器发出建议,让它在合适的情况下尝试内联展开函数。

相关推荐
ZhiqianXia14 小时前
《The Design of Design》阅读笔记
前端·笔记·microsoft
祁白_15 小时前
nmap工具笔记整理
笔记·web安全·测试
南境十里·墨染春水15 小时前
C++笔记 STL——set
开发语言·c++·笔记
d111111111d15 小时前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
LZYmarks15 小时前
小白买车笔记
笔记
码途漫谈16 小时前
Easy-Vibe开发篇阅读笔记(二)——前端开发之Figma与MasterGo入门
人工智能·笔记·ai·开源·ai编程·figma
LaLaLa_OvO16 小时前
jetbrains 的 datagrip 导出csv,中文乱码
笔记
大囚长16 小时前
权力的哲学洞察与反思
笔记
java_logo17 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
d111111111d17 小时前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习