Linked list 用rust打印单链表的最佳方法

Linked list 用rust打印单链表的最佳方法,linked-list,rust,singly-linked-list,Linked List,Rust,Singly Linked List,在我学习rust的过程中,我试图找到在rust中打印单链接结构列表的最佳方法。以下是我的代码: struct SList{ n:int, 下一步:选项 } fn打印列表(多页:&slist){ 印刷品!(“{}”,l.n); 环路{ 下一场比赛{ Some(ref next)=>{print!(“->{}”,next.n);l=&(**next);}, 无=>{break;} } } println!(“”); } fn main(){ 设sl1=SList{n:11,next:Some(box

在我学习rust的过程中,我试图找到在rust中打印单链接结构列表的最佳方法。以下是我的代码:

struct SList{
n:int,
下一步:选项
}
fn打印列表(多页:&slist){
印刷品!(“{}”,l.n);
环路{
下一场比赛{
Some(ref next)=>{print!(“->{}”,next.n);l=&(**next);},
无=>{break;}
}
}
println!(“”);
}
fn main(){
设sl1=SList{n:11,next:Some(box SList{n:22,next:Some(box SList{n:33,next:None})});
打印列表(&sl1);
}

我相信这可以用更好的方式来完成,我很想了解他们。除此之外,我还关心
&(**下一步)
部分。它是否创建了下一个
SList
的不必要副本?

您所拥有的工作正常,
next
类型为
&Box
,因此
&**next
类型为
&SList

但是,您可以通过取消对模式中框的引用并立即获取
&SList
来整理它

Some(框参考下一步)=>{
打印!(“->{}”,next.n);
l=下一个;
},
我还建议用迭代器编写这样的东西。还实现了
std::fmt::Show
,而不是编写单独的函数

下面是迭代和实现
Show
的示例实现:

使用std::fmt;
结构滑动{
n:int,
下一步:选项
}
struct SListIter,
}
冲击滑动{

fn用于SListIter的iter SListIter迭代器您所拥有的可以正常工作,
next
类型为
&Box
,因此
&**next
类型为
&SList

但是,您可以通过取消对模式中框的引用并立即获取
&SList
来整理它

Some(框参考下一步)=>{
打印!(“->{}”,next.n);
l=下一个;
},
我还建议用迭代器来编写这样的东西,同时实现
std::fmt::Show
,而不是编写单独的函数

下面是迭代和实现
Show
的示例实现:

使用std::fmt;
结构滑动{
n:int,
下一步:选项
}
struct SListIter,
}
冲击滑动{

fn iter SListIter迭代器,用于SListIterGreat答案!感谢您这么快回复。非常好的答案!感谢您这么快回复。