可视化指针-Swift中的LinkedList

可视化指针-Swift中的LinkedList,swift,pointers,linked-list,Swift,Pointers,Linked List,我遇到了一些麻烦,读那些“指针”会让我的大脑受伤——你如何有效地阅读指针并可视化指针 下面是一个简单的例子,但在我的大脑中,阅读/跟踪这些指针(上一个和下一个)是一项艰巨的任务。我们如何以较少的认知努力来实现这一点 我如何看待/想象删除链表中的节点是将链表视为一排人,如果他们是前面和旁边的人,他们会互相指指点点(dnd 5e中的地狱般的指责)。。。这有帮助,但效率不高 public func remove(node : Node<Element>) -> Element {

我遇到了一些麻烦,读那些“指针”会让我的大脑受伤——你如何有效地阅读指针并可视化指针

下面是一个简单的例子,但在我的大脑中,阅读/跟踪这些指针(上一个和下一个)是一项艰巨的任务。我们如何以较少的认知努力来实现这一点

我如何看待/想象删除链表中的节点是将链表视为一排人,如果他们是前面和旁边的人,他们会互相指指点点(dnd 5e中的地狱般的指责)。。。这有帮助,但效率不高

public func remove(node : Node<Element>) -> Element {
        let prev = node.previous
        let next = node.next
        
        if let prev = prev {
            prev.next = next
        }
        else {
            head = next
        }
        
        if let next = next {
            next.previous = prev
        }
        else {
            tail = prev
        }
        
        node.previous = nil
        node.next = nil
        
        return node.value
    }
public func remove(节点:node)->元素{
设prev=node.previous
让next=node.next
如果let prev=prev{
上一个=下一个
}
否则{
头=下一个
}
如果让下一个=下一个{
next.previous=prev
}
否则{
尾=上
}
node.previous=nil
node.next=nil
返回node.value
}

将每个节点绘制为一个框

在每个框中,提供“指针”部分。从指针部分绘制指向另一个框的箭头

把指针想象成邮寄地址。每个框(节点)都有上一个和下一个节点的(邮寄)地址

如果删除一个节点,则必须更新存储在相邻节点中的邮件地址,以便它们不再尝试指向现在丢失的节点


从邮寄地址到存储地址并不是一个很大的飞跃,这就是指针实际存储的内容。

不确定这是一个如何快速解决的问题,但如果你想象排队的人彼此握着手,一个人握着前一个人右手的左手,另一个人右手握着下一个人左手,那么移除这个人就意味着前一个右手现在是握住next的左手。这很有帮助-谢谢!“盒子和指针图”是在黑板上绘制它们的一种传统方法,在黑板上你可以擦除它们来完成算法