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

相关推荐
梨子串桃子_2 小时前
推荐系统学习笔记 | PyTorch学习笔记
pytorch·笔记·python·学习·算法
暮色_年华2 小时前
随想 2:对比 linux内核侵入式链表和 STL 非侵入链表
linux·c++·链表
laplace01234 小时前
# 第六章 agent框架开发实践 - 学习笔记
人工智能·笔记·学习·语言模型·agent
坚持不懈的大白5 小时前
Leetcode学习笔记
笔记·学习·leetcode
千谦阙听5 小时前
双链表:比单链表更高效的增删查改
数据结构·链表·visual studio
中屹指纹浏览器5 小时前
双GAN网络驱动的动态指纹生成技术深度解析——原理、实现与抗检测优化
经验分享·笔记
JeffDingAI5 小时前
【Datawhale学习笔记】基于Gensim的词向量实战
人工智能·笔记·学习
栈与堆7 小时前
LeetCode 21 - 合并两个有序链表
java·数据结构·python·算法·leetcode·链表·rust
FakeOccupational8 小时前
【电路笔记 PCB】Altium Designer : AD使用教程+Altium Designer常见AD操作命令与流程
开发语言·笔记
Hello_Embed8 小时前
RS485 双串口通信 + LCD 实时显示(DMA+IDLE 空闲中断版)
笔记·单片机·学习·操作系统·嵌入式·freertos