Rust 单链表实现

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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值