这是leetcode 19题,删除链表倒数第n个节点。
我用的双指针,找到要删除节点的前继sec,现在的问题是,我想把&,改成&mut,进行链表节点的删除操作,
想请教下大家,这一步有什么方法嘛
pub fn remove_nth_from_end(head: Option<Box<ListNode>>, n: i32) -> Option<Box<ListNode>> {
let mut dummy = Some(Box::new(ListNode{val: 0, next: head}));
let mut fst = &dummy;
let mut sec = &dummy;
for _ in 0..n+1{
fst = &fst.as_ref()?.next;
}
loop {
if fst.is_none() {
break;
}
fst = &fst.as_ref()?.next;
sec = &sec.as_ref()?.next;
}
// now, just remove sec.next, but i can't change sec
dummy?.next
}
Ext Link: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
1
共 4 条评论, 1 页
评论区
写评论酷
👇
Peacess: 使用内部可变性的 RefCell. 把类型改为:head: Option<RefCell<Box>>,整个可变 或者修改ListNode中的next改为RefCell,这样只能修改next.
那得用unsafe强转了,这个场景下可以保证是安全的。不用unsafe可以这样写:
https://leetcode-cn.com/submissions/detail/192049943/
可以参考一下这个 https://rustgym.com/leetcode/19
使用内部可变性的 RefCell. 把类型改为:head: Option<RefCell<Box>>,整个可变 或者修改ListNode中的next改为RefCell,这样只能修改next.