这是 os summer of code 2020 项目每日记录的一部分:
github地址:https://github.com/yunwei37/os-summer-of-code-daily
其他一些 rust 的小练习:
笨办法系列
- c32-list: 练习32:双向链表
- c33-sort: 练习33:链表算法
- c40-bst: 练习40:二叉搜索树
- c42-stack-queue: 练习42:栈和队列
- c38-hashal:练习38:哈希算法
Leecode题目用Rust实现
参考:https://leetcode-cn.com/problemset/all/
文件夹中包含:
- README.md: 题目的出处和相关描述信息
- solution.rs: rust语言实现代码
- solution.c: c语言的实现代码
题目目录:
- leetcode-best-time-to-buy-and-sell-stock - 121. 买卖股票的最佳时机
- leetcode-binary-tree-inorder-traversal - 94. 二叉树的中序遍历
- leetcode-game-of-life - 289. 生命游戏
- leetcode-maximum-depth-of-binary-tree - 104. 二叉树的最大深度
- leetcode-maximum-subarray - 53. 最大子序和
- leetcode-remove-element - 27. 移除元素
- leetcode-set-matrix-zeroes - 73. 矩阵置零
- leetcode-valid-parentheses - 20. 有效的括号
- leetcode-longest-consecutive-sequence - 128. 最长连续序列
- leetcode-friend-circles - 547. 朋友圈
双向链表
注意,这里是很早的时候写的代码,实际上实现双向链表最好要使用 weak 来避免循环引用和内存泄漏问题。
数据结构定义:
use std::rc::Rc;
use std::cell::RefCell;
use std::clone::Clone;
#[derive(Debug)]
struct ListNode
{
value :i32,
next: Option<Rc<RefCell<ListNode>>>,
prev: Option<Rc<RefCell<ListNode>>>
}
#[derive(Debug)]
pub struct List{
count: i32,
first: Option<Rc<RefCell<ListNode>>>,
last: Option<Rc<RefCell<ListNode>>>
}
函数实现
impl ListNode {
fn new(value:i32) -> Rc<RefCell<ListNode>>{
let pointer = Rc::new(RefCell::new(ListNode {
value,
next: None,
prev: None,
}));
Rc::clone(&pointer)
}
}
impl List {
pub fn new() -> List {
let first = ListNode::new(0);
let last = ListNode::new(0);