< 返回版块

wonderwater 发表于 2021-07-01 15:53

Tags:mut, rust

这是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/

评论区

写评论
overheat 2021-07-06 06:34

👇
Peacess: 使用内部可变性的 RefCell. 把类型改为:head: Option<RefCell<Box>>,整个可变 或者修改ListNode中的next改为RefCell,这样只能修改next.

zhouzuoji 2021-07-04 01:10

那得用unsafe强转了,这个场景下可以保证是安全的。不用unsafe可以这样写:

https://leetcode-cn.com/submissions/detail/192049943/

Bai-Jinlin 2021-07-01 19:00

可以参考一下这个 https://rustgym.com/leetcode/19

Peacess 2021-07-01 16:27

使用内部可变性的 RefCell. 把类型改为:head: Option<RefCell<Box>>,整个可变 或者修改ListNode中的next改为RefCell,这样只能修改next.

1 共 4 条评论, 1 页