Rust 单链表实现

博客围绕Rust这一后端开发语言展开,虽未给出具体内容,但从标签可知其与后端开发相关。Rust作为开发语言,在后端开发领域有一定应用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

use std::cell::RefCell;
use std::fmt::Display;
use std::rc::Rc;

// 定义节点结构体
type SingleLink<T> = Option<Rc<RefCell<Node<T>>>>;

struct Node<T> {
    value: T,
    next: SingleLink<T>,
}

// 定义链表结构体
struct LinkedList<T> {
    head: SingleLink<T>,
    tail: SingleLink<T>,
    pub length: u32,
}

impl<T> Node<T> {
    fn new(value: T) -> Rc<RefCell<Node<T>>> {
        Rc::new(RefCell::new(Node { value, next: None }))
    }
}

impl<T> LinkedList<T> {
    // 创建一个新的空链表
    pub fn new() -> LinkedList<T> {
        LinkedList {
            head: None,
            tail: None,
            length: 0,
        }
    }

    // 向链表末尾添加一个新元素
    pub fn append(&mut self, value: T) {
        let new = Node::new(value);
        match self.tail.take() {
            Some(old) => old.borrow_mut().next = Some(new.clone()),
            None => self.head = Some(new.clone()),
        };
        self.length += 1;
        self.tail = Some(new);
    }

    // 打印链表中的所有元素
    pub fn print(&self) 
    where T: Display{
        let mut current = self.head.clone();
        while let Some(rc) = current {
            let borrowed = rc.borrow();
            print!("{} ", borrowed.value);
            current = borrowed.next.clone();
        }
        println!();
    }
}

fn main() {
    let mut list = LinkedList::new();
    list.append(1);
    list.append(2);
    list.append(3);

    list.print();
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值