元件的端点和端点是可以连接在一起的,比如导线的端点连接器材的接线柱,当两个端点连接在一起时,我们怎么来存储端点之间的关系,如何执行连接和断开操作。
连接一个顶点的时间复杂度是O(n)。
断开一个顶点的时间复杂度是O(n²)。(数组删除一个元素本身的时间复杂度是O(n))
存储所有顶点需要的空间是n²。
类似于邻接表。
实现起来比较复杂,有兴趣可以自己试试。
连接一个顶点的时间复杂度是O(1)。
断开一个顶点的时间复杂度是O(1)。
存储所有顶点需要的空间是n。
一个节点:
多个节点:
实现代码如下:
class ListNode{
public next: ListNode;
public prev: ListNode;
constructor() {
this.next = this;
this.prev = this;
}
public destroy() {
this.next = null;
this.prev = null;
}
public connect(node: ListNode): void {
const next1: ListNode = this.next;
const next2: ListNode = node.next;
this.next = next2;
next2.prev = this;
node.next = next1;
next1.prev = node;
}
public disConnect(): void {
this.prev.next = this.next;
this.next.prev = this.prev;
this.next = this;
this.prev = this;
}
}
数据结构和算法就像孙子兵法一样,背诵容易,实战很难。要做到在合适的场景应用合适的数据结构和算法,并能适当的进行结合、扩展。