- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Rust 的新手,我只是在做一些练习。有一个链表。比如0->1->2->3->4,在索引2处截断,然后将两者反转,再合成。 => 0<-1<-2 3<-4 => 2->1->0->4->3
#[derive(debug)]
struct Node{
val: usize,
next: Option<Box<Node>>,
}
impl Node {
fn new(i: usize) -> Node {
...
}
fn reverse_at(self, k: usize) -> Box<Node> {
let mut prev = None;
let mut curr = Box::new(self);
let first_part_tail = &mut curr;
let mut i: usize = 0;
while i <= k {
let next = curr.next.take();
curr.next = prev;
match next {
Some(next_node) => {
prev = Some(curr);
curr = next_node;
}
None => return curr,
}
i += 1;
}
let head = prev.unwrap();
prev = None;
loop {
let next = curr.next.take();
curr.next = prev;
match next {
Some(next_node) => {
prev = Some(curr);
curr = next_node;
}
None => {
first_part_tail.next = Some(curr);
return head;
}
}
}
}
}
我需要获取第一个节点的可变借用0,获取最后一个节点后设置0.next=4< strong>4 在函数的末尾。但是节点0的所有权已经发送给节点1。显然,error[E0499]: cannot borrow `curr.next` as mutable a more than once a time
发生了,我不知道该怎么做。这困扰了我很长时间。请提供任何帮助。
&
,我想这个函数会改变节点本身。而且我不知道如何将 self 引用更改为新节点,所以我使用了 self
。如果有人可以修改它,那也有帮助。也许,将此功能更改为
fn reverse_at(&mut self, k:usize){
...
}
最佳答案
@Ultrasaurus 感谢学习资源https://rust-unofficial.github.io/too-many-lists/ .现在我解决了这个问题,虽然这需要一些时间。
最终代码在这里playground
有点奇怪,我的LinkedNumber.head
是Node
,导致 LinkedNumber
总是有一个头,可能为零,但不为空。也许应该是Box<Node>
.
在第 71 行,我使用 ptr::read
, 它将
Reads the value from
src
without moving it.
mem::take
也可以但它需要初始 Node
默认值为 trait Default
.
比我用Box::new
将节点从堆栈移动到堆中。 (没有必要这样做,如果 LinkedNumber.head
是 Box<Node>
)
在第 73 行,标记 raw_pointer *const Node
在第 94 行,如果链接被分成两部分,则转换 *const Node
进入*mut Node
, 取消引用它,设置 (*ptr).next
与原始链接的最后一个节点。
如何测试:更改num.reverse_at(3)
中的数字在第 171 行,它工作正常。
关于rust - Rust 中的可变借用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58350593/
我正在使用 tcod-rs。用于绘制到 RootConsole 的每个方法都采用一个可变引用。中央循环是一个 while 循环,它等待窗口关闭、清除屏幕、绘制,然后刷新。 “检查窗口关闭”方法也采用可
This question already has answers here: How to return a reference to a sub-value of a value that is
我是新手,我已经阅读了有关所有权和借用的文档。显然,我开始为这个概念而苦苦挣扎... 这是我的代码: #[derive(Serialize, Deserialize, Debug)] pub stru
我在借阅检查器上遇到了问题。我有一个特征(Physics),它具有getters(例如velocity)和setters(例如velocity_mut)。它还具有使用getter和setter的默认方
我正在用 Rust 编写 Rogue-like。我有一个 Player,它有一个 Vec 的盒装 TimedEffects。定时效果有一个 activate(&mut Player) 和 deacti
我觉得 rc::Weak可以使用(某种)AsRef特征实现。我试图从弱指针借用一些共享内容,但这不会编译: use std::rc::Weak; struct Thing(Weak); impl Th
我正在学习Rust。对于我的第一个程序,我编写了以下代码来维护有关部分排序的数据: use std::collections::{HashMap, HashSet}; struct Node {
这个问题在这里已经有了答案: Cannot borrow as immutable because it is also borrowed as mutable in function argume
在尝试实现一个迭代器以产生对链表元素的可变引用时,我偶然发现了一个奇怪的问题。 这很好用: impl Iterator for LinkedListIterator{ fn next(&mut
我有this minimal example code : use std::borrow::BorrowMut; trait Foo {} struct Bar; impl Foo for Bar
struct State { x: i32 } trait A { fn a(&mut self, b: &i32); } impl A for State { fn a(&m
我有一个 Element 结构,它实现了一个更新方法,该方法需要一个滴答持续时间。该结构包含一个组件向量。允许这些组件在更新时修改元素。我在这里遇到借用错误,我不确定该怎么做。我尝试用 block 修
我正在尝试做这样的事情 use std::cell::{RefCell,Ref,RefMut}; use std::rc::Rc; struct Entity; struct Tile { e
我已连接到 Deribit websocket 以获取选项数据,但以下代码片段仅获得一个有效的数据响应,然后停止更新,但表示它仍在运行。 该网站建议使用 asyncio 模块,但能够使用以下代码片段提
我是一名优秀的程序员,十分优秀!