我正在尝试了解Rust中的所有权如何与链表一起使用。我有这段代码:
struct Node {
value: i32,
next: Option<Box<Node>>
}
fn main() {
let mut x = Box::new(Node {value: 1, next: None});
let mut y = Box::new(Node {value: 2, next: Some(x)});
}
创建链接列表y - &gt; x - &gt;空值。是否有可能在原地进行切换,以便最终得到x - &gt; y - &gt; null而不分配任何新节点?
答案 0 :(得分:3)
绝对。在这种情况下,所有权非常简单:<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<textarea maxlength="5" placeholder="echo"></textarea>
<br>
<!-- set `x-custom-header` to `input type="text"` value -->
<input type="text" maxlength="5" placeholder="set request header" />
<br />
<input type="button" value="download" />
<!-- set default `x-custom-header` to "123" -->
<a data-headers='{"x-custom-headers":"123"}'></a>
函数拥有main
,拥有y
,所有者可以改变他们拥有的东西。
要交换两个节点x
和a
b
→a
→...,您只需执行以下操作:
b
断开b
,以便您a
→⊥和a
→.... b
后的所有内容;请拨打此b
。您现在有c…
→⊥和b
→....请注意c
可能为空,也可能是长列表;我们不在乎。c
和a
现在已经独自存在,并且无法与其他任何内容相关联,因此您只需交换内容即可将其交换到原位。b
附加到c
的末尾,为您提供a
→a
→.... c
附加到a
的末尾,为您提供b
→b
→.... 没有新节点需要分配,这可以直接转录到Rust:
a
最后,如果我没有指出你Learning Rust With Entirely Too Many Linked Lists,我会失职。