Skip to content

Commit b180d0c

Browse files
committed
Add LinkedList in Rust
1 parent a78ab11 commit b180d0c

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Com o objetivo de alcançar uma abrangência maior e encorajar novas pessoas a c
3939
| [Fila Encadeada Dinâmica][19] | [C/C++](./src/c/FilaEncadeadaDinamica.c) | Java | Python | Go | Ruby | JS | Pascal | Swift | Rust |
4040
| [Grafo][20] | [C/C++](./src/c/Grafos.c) | Java | Python | Go | Ruby | JS | Pascal | Swift | Rust |
4141
| [Lista Circular Ligada][52] | [C/C++](./src/c/ListaCircularLigada.c) | Java | [Python](./src/python/lista_encadeada_circular.py) | Go | Ruby | JS | Pascal | Swift | Rust |
42-
| [Lista Encadeada][22] | C/C++ | Java | [Python](./src/python/lista_encadeada.py) | Go | [Ruby](./src/ruby/Lista_encadeada.rb) | [JS](./src/javascript/ListaSimplesmenteEncadeada.js) | Pascal | Swift | Rust |
42+
| [Lista Encadeada][22] | C/C++ | Java | [Python](./src/python/lista_encadeada.py) | Go | [Ruby](./src/ruby/Lista_encadeada.rb) | [JS](./src/javascript/ListaSimplesmenteEncadeada.js) | Pascal | Swift | [Rust](./src/rust/linked_list.rs) |
4343
| [Lista Duplamente Encadeada][23] | [C/C++](./src/c/ListaDuplamenteEncadeada.c) | [Java](./src/java/ListaDuplamenteEncadeada.java) | [Python](./src/python/lista_duplamente_encadeada.py) | Go | [Ruby](./src/ruby/Lista_duplamente_encadeada.rb)| [JS](./src/javascript/ListaDuplamenteEncadeada.js) | Pascal | Swift | Rust |
4444
| [Lista Ligada Não Ordenada][24] | [C/C++](./src/c/ListaLigadaNaoOrdenada.c) | Java | Python | [Go](src/go/listasequencialnaoordenada/listaSequencialNaoOrdenada.go) | Ruby | JS | Pascal | Swift | Rust |
4545
| Lista Sequencial Ordenada | [C/C++](./src/c/ListaSequencialOrdenada.c) | Java | [Python](./src/python/lista_sequencial_ordenada.py) | [Go](src/go/listasequencialordenada/listaSequencialOrdenada.go) | Ruby | JS | Pascal | Swift | Rust |

src/rust/linked_list.rs

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#[derive(Debug)]
2+
struct Node<T> {
3+
data: T,
4+
next: Option<Box<Node<T>>>,
5+
}
6+
7+
#[derive(Debug)]
8+
struct LinkedList<T> {
9+
head: Option<Box<Node<T>>>,
10+
size: usize,
11+
}
12+
13+
impl<T> LinkedList<T> {
14+
pub fn new() -> Self {
15+
LinkedList {
16+
head: None,
17+
size: 0,
18+
}
19+
}
20+
21+
pub fn len(&self) -> usize {
22+
self.size
23+
}
24+
25+
pub fn push(&mut self, data: T) {
26+
self.head = Some(Box::new(Node {
27+
data: data,
28+
next: self.head.take(),
29+
}));
30+
self.size += 1;
31+
}
32+
33+
pub fn pop(&mut self) -> Option<T> {
34+
self.head.take().map(|h| {
35+
self.head = h.next;
36+
self.size -= 1;
37+
h.data
38+
})
39+
}
40+
}
41+
42+
fn main() {
43+
let mut linked_list: LinkedList<u16> = LinkedList::new();
44+
linked_list.push(1);
45+
linked_list.push(2);
46+
linked_list.push(3);
47+
println!("{:#?}", linked_list);
48+
linked_list.pop();
49+
println!("{:#?}", linked_list);
50+
println!("Linked List Length: {}", linked_list.len());
51+
}

0 commit comments

Comments
 (0)