# 数据驱动型的设计02

1 何为链表？

1.1 概念

1.2 链表有特点呢？

2 用代码实现一个链表结构

2.1 节点

```class LinkedListNode {
constructor(value,next) {
this.value = value;
this.next = next;
}
}```

```class Point {
constructor(){
this.x=0;
this.y=0;    // ...
}
toString(){    // ...
}
toValue(){    // ...
}
};

// 等同于

function Point(){
this.x=0;
this.y=0;
//...
};

Point.prototype = {
toString(){},
toValue(){}
};```

2.2 链表的基本结构

```class LinkedList{    constructor(){
this.tail = null;
}}```

`var ls=new LinkedList();`

2.3 添加方法

append - 在结尾插入节点

prepend - 在开始插入节点

find

delete

2.3.1 prepend方法

```LinkedList.prototype.prepend=function(value) {
// 如果tail为空，往tail添加此节点

if (!this.tail) {
this.tail = newNode;
}

return this;  }```

`ls.prepend(0);console.log(JSON.stringify(ls,null,2));`

```{  "head": {
"value": 0,
"next": null
},
"tail": {
"value": 0,
"next": null
}
}```

```ls.prepend(1);
console.log(JSON.stringify(ls,null,2));```

```"{
"value": 1,
"next": {
"value": 0,
"next": null
}
},
"tail": {
"value": 0,
"next": null
}
}"```

2.3.2 append方法

```LinkedList.prototype.append=function(value) {
this.tail = newNode;
return this;
}

// 把新的newNode设为tail
this.tail.next = newNode;
this.tail = newNode;
return this;
}```

```ls.append(10);
console.log(JSON.stringify(ls,null,2));```

2.3.3 compare方法

```LinkedList.prototype.compare=function(a,b){

if (a === b) {
return 0;
}

return a < b ? -1 : 1;};```

2.3.4 delete方法

```LinkedList.prototype.delete=function(value) {
let deletedNode = null;
}

if (currentNode !== null) {
// 遍历每一个节点
while (currentNode.next) {
if (this.compare(currentNode.next.value, value)===0) {
deletedNode = currentNode.next;
currentNode.next = currentNode.next.next;
} else {
currentNode = currentNode.next;
}
}
}

// 判断tail节点是否需要删除
if (this.compare(this.tail.value, value)===0) {
this.tail = currentNode;
}

return deletedNode;

};```

2.3.5 find方法

```LinkedList.prototype.find=function(value) {

while (currentNode) {

if (value && this.compare(currentNode.value, value)===0) {
return currentNode;
}     currentNode = currentNode.next;
}

return null; }```

2.3.6 toArray方法

```  LinkedList.prototype.toArray=function() {
const nodes = [];
while (currentNode) {
nodes.push(currentNode);
currentNode = currentNode.next;
}
return nodes;
}```

3 设计中的链表结构

3.1 链表结构的几种基本类型

3.2 设计中的链表结构

1）用户体验的流线

UX设计中页面的跳转流线；

2）设计思路的解构

0 条评论

• ### 哈利波特AR游戏-巫师联盟 深度解析

今年AR技术的进展，及相关应用值得我们关注。给大家推荐一个AR游戏，应该会超越Pokemon Go。

• ### ​用expo，从0到1 轻松学react native

题图由 小程序 ACELAND 人工智能制作 我们在学习一门语言或新入门一套框架时，往往会被繁琐的配置环境所困扰。 回想我刚接触rn的时候，用的是mac，配...

• ### 技能之AR技术入门

AR真真假假，分不清～ 今天继续技能篇。往期技能文章有兴趣可以查阅： 5个用法，关于Gif。 技能之用iMovie制作预告片 AR跟VR都可以达到真假难辨的目...

• ### HMD 回应 Nokia 7 Plus 事件：从未向第三方共享用户数据

日前有诺基亚手机的非中国用户发现，手机会向域名 http://zzhc.vnet.cn 发送未加密的数据包。数据包含了地理位置、IMEI、SIM 卡号和 MAC...

• ### 开源 | CVPR2020 | 结构化的知识蒸馏算法，有效应用于语义分割、深度估计和目标检测

论文地址：http://arxiv.org/pdf/1903.04197v5.pdf

• ### 全球超150家车企停产的时候，特斯拉还在整AR的幺蛾子？

（VRPinea5月6日讯）近日，据央媒报道，全球汽车产业正遭遇史上最大规模的危机。全球五大车展的日内瓦车展和底特律车展相继取消。3月，自法拉利跑车宣布停产后，...

• ### nginx0.1.0之event模块初始化源码分析(1)

nginx模块初始化的流程在下面的代码中，核心模块的初始化，各核心模块首先在create_conf中创建保存配置的数据结构，然后在ngx_conf_parse中...

• ### 用 :key 管理可复用元素

我们会发现，在点击按钮切换登录方式后，输入框中已有的内容没有被清除，这是为什么呢？

• ### AI技术三大应用领域：智能医疗、自动驾驶、智慧营销产业发展现状分析

“So tomorrow, if AI can shape healthcare, it has to work through the regulations...