单链表 指针
利用结构体 (struct) 定义成员变量
num 表示当前结点值,next 指向下一个结点的指针。
#[derive(Debug)]
pub struct List {
pub num: i32,
pub next: Option>,
}
利用 impl 关键字来定义结构体成员方法
impl List {
}
创建链表
pub fn new(value: i32) -> List {
List {
next: None,
num: value
}
}
添加结点
pub fn append(&mut self, value: i32) {
let _node = List::new(value);
self.get_last_node().next = Some(Box::new(_node));
}
计算链表长度
pub fn len(&self) -> u32 {
match &self.next {
Some(list) => list.len() + 1,
None => 0,
}
}
找到最后一个结点
pub fn get_last_node(&mut self) -> &mut Self {
if let Some(ref mut node) = self.next {
node.get_last_node()
}
else {
return self;
}
}
遍历链表
pub fn traverse(&self) {
let mut node_num = 0;
let mut curr = self.next.as_ref();
while curr.is_some() {
print!("node{}: {:?}n", node_num, curr);
curr = curr.unwrap().next.as_ref();
node_num += 1;
}
}
删除结点值为 value 的结点
pub fn delete_node(head: Option>, value: i32) -> Option> {
let mut head = head;
let mut curr = head.as_mut();
while curr.is_some() && curr.as_ref().unwrap().next.is_some() {
if curr.as_ref().unwrap().next.as_ref().unwrap().num == value {
let next = curr.as_mut().unwrap().next.as_mut().unwrap().next.take();
curr.as_mut().unwrap().next = next;
}
else {
curr = curr.unwrap().next.as_mut();
}
}
return head;
}
测试代码
#[derive(Debug)]
pub struct List {
pub num: i32,
pub next: Option>,
}
原作者:Papalymo
更多回帖