diff --git a/codes/rust/chapter_array_and_linkedlist/my_list.rs b/codes/rust/chapter_array_and_linkedlist/my_list.rs index 8575cee539..1ed7073065 100644 --- a/codes/rust/chapter_array_and_linkedlist/my_list.rs +++ b/codes/rust/chapter_array_and_linkedlist/my_list.rs @@ -19,8 +19,7 @@ struct MyList { impl MyList { /* 构造方法 */ pub fn new(capacity: usize) -> Self { - let mut vec = Vec::new(); - vec.resize(capacity, 0); + let mut vec = vec![0; capacity]; Self { arr: vec, capacity, @@ -92,7 +91,7 @@ impl MyList { }; let num = self.arr[index]; // 将将索引 index 之后的元素都向前移动一位 - for j in (index..self.size - 1) { + for j in index..self.size - 1 { self.arr[j] = self.arr[j + 1]; } // 更新元素数量 @@ -111,7 +110,7 @@ impl MyList { } /* 将列表转换为数组 */ - pub fn to_array(&mut self) -> Vec { + pub fn to_array(&self) -> Vec { // 仅转换有效长度范围内的列表元素 let mut arr = Vec::new(); for i in 0..self.size { diff --git a/codes/rust/chapter_stack_and_queue/linkedlist_deque.rs b/codes/rust/chapter_stack_and_queue/linkedlist_deque.rs index dda3adb616..06d026a036 100644 --- a/codes/rust/chapter_stack_and_queue/linkedlist_deque.rs +++ b/codes/rust/chapter_stack_and_queue/linkedlist_deque.rs @@ -120,7 +120,7 @@ impl LinkedListDeque { } } self.que_size -= 1; // 更新队列长度 - Rc::try_unwrap(old_front).ok().unwrap().into_inner().val + old_front.borrow().val }) } // 队尾出队操作 @@ -136,7 +136,7 @@ impl LinkedListDeque { } } self.que_size -= 1; // 更新队列长度 - Rc::try_unwrap(old_rear).ok().unwrap().into_inner().val + old_rear.borrow().val }) } } @@ -163,12 +163,16 @@ impl LinkedListDeque { /* 返回数组用于打印 */ pub fn to_array(&self, head: Option<&Rc>>>) -> Vec { - if let Some(node) = head { - let mut nums = self.to_array(node.borrow().next.as_ref()); - nums.insert(0, node.borrow().val); - return nums; + let mut res: Vec = Vec::new(); + fn recur(cur: Option<&Rc>>>, res: &mut Vec) { + if let Some(cur) = cur { + res.push(cur.borrow().val); + recur(cur.borrow().next.as_ref(), res); + } } - return Vec::new(); + + recur(head, &mut res); + res } } diff --git a/codes/rust/chapter_stack_and_queue/linkedlist_queue.rs b/codes/rust/chapter_stack_and_queue/linkedlist_queue.rs index ee2f68f32c..50230164d6 100644 --- a/codes/rust/chapter_stack_and_queue/linkedlist_queue.rs +++ b/codes/rust/chapter_stack_and_queue/linkedlist_queue.rs @@ -67,7 +67,7 @@ impl LinkedListQueue { } } self.que_size -= 1; - Rc::try_unwrap(old_front).ok().unwrap().into_inner().val + old_front.borrow().val }) } @@ -78,12 +78,18 @@ impl LinkedListQueue { /* 将链表转化为 Array 并返回 */ pub fn to_array(&self, head: Option<&Rc>>>) -> Vec { - if let Some(node) = head { - let mut nums = self.to_array(node.borrow().next.as_ref()); - nums.insert(0, node.borrow().val); - return nums; + let mut res: Vec = Vec::new(); + + fn recur(cur: Option<&Rc>>>, res: &mut Vec) { + if let Some(cur) = cur { + res.push(cur.borrow().val); + recur(cur.borrow().next.as_ref(), res); + } } - return Vec::new(); + + recur(head, &mut res); + + res } } diff --git a/codes/rust/chapter_stack_and_queue/linkedlist_stack.rs b/codes/rust/chapter_stack_and_queue/linkedlist_stack.rs index 0a96df0e27..be14156922 100644 --- a/codes/rust/chapter_stack_and_queue/linkedlist_stack.rs +++ b/codes/rust/chapter_stack_and_queue/linkedlist_stack.rs @@ -45,16 +45,10 @@ impl LinkedListStack { /* 出栈 */ pub fn pop(&mut self) -> Option { self.stack_peek.take().map(|old_head| { - match old_head.borrow_mut().next.take() { - Some(new_head) => { - self.stack_peek = Some(new_head); - } - None => { - self.stack_peek = None; - } - } + self.stack_peek = old_head.borrow_mut().next.take(); self.stk_size -= 1; - Rc::try_unwrap(old_head).ok().unwrap().into_inner().val + + old_head.borrow().val }) }