首页 > 解决方案 > 可视化指针 - Swift 中的 LinkedList

问题描述

阅读这些“指针”时我遇到了一些麻烦,我的大脑很痛——你如何有效地阅读指针并可视化指针?

下面是一个简单的示例,但在我的大脑中读取/跟踪这些指针(上一个和下一个)是一项艰巨的任务。我们如何以更少的认知努力来解决这个问题?

我如何看到/可视化删除链表中的节点是认为链表就像一行人和人们互相指指点点(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
    }

标签: swiftpointerslinked-list

解决方案


将每个节点绘制为一个框。

在每个框中,提供一个“指针”部分。从指针部分画一个箭头到另一个框。

将指针视为邮寄地址。每个盒子(节点)都有前一个和下一个节点的(邮寄)地址。

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

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


推荐阅读