用rust写一个单链表
时间: 2023-04-06 11:05:01 浏览: 158
好的,我可以回答这个问题。在Rust中,可以使用结构体和枚举来实现单链表。以下是一个简单的单链表实现示例:
```rust
struct Node<T> {
data: T,
next: Option<Box<Node<T>>>,
}
impl<T> Node<T> {
fn new(data: T) -> Self {
Node { data, next: None }
}
}
struct LinkedList<T> {
head: Option<Box<Node<T>>>,
}
impl<T> LinkedList<T> {
fn new() -> Self {
LinkedList { head: None }
}
fn push(&mut self, data: T) {
let new_node = Box::new(Node::new(data));
match self.head.take() {
Some(old_head) => {
new_node.next = Some(old_head);
self.head = Some(new_node);
}
None => {
self.head = Some(new_node);
}
}
}
fn pop(&mut self) -> Option<T> {
self.head.take().map(|mut old_head| {
self.head = old_head.next.take();
old_head.data
})
}
}
```
这个实现包括一个`Node`结构体和一个`LinkedList`结构体。`Node`结构体表示单链表中的一个节点,包含一个数据项和一个指向下一个节点的指针。`LinkedList`结构体表示整个单链表,包含一个指向头节点的指针。
`LinkedList`结构体实现了`push`和`pop`方法,用于在单链表的头部插入和删除节点。`push`方法将新节点插入到链表的头部,`pop`方法从链表的头部删除节点并返回其数据项。
这只是一个简单的单链表实现示例,实际上还有很多可以改进的地方。但是,希望这个示例可以帮助你开始使用Rust编写单链表。
阅读全文