Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
68b13d12
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
68b13d12
编写于
4月 01, 2019
作者:
J
Johannes Rieken
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
debt - use dummy node instead of undefined to signel end
上级
d0f56d89
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
22 deletion
+27
-22
src/vs/base/common/linkedList.ts
src/vs/base/common/linkedList.ts
+27
-22
未找到文件。
src/vs/base/common/linkedList.ts
浏览文件 @
68b13d12
...
...
@@ -6,19 +6,24 @@
import
{
Iterator
,
IteratorResult
,
FIN
}
from
'
vs/base/common/iterator
'
;
class
Node
<
E
>
{
static
readonly
Undefined
=
new
Node
<
any
>
(
undefined
);
element
:
E
;
next
:
Node
<
E
>
|
undefined
;
prev
:
Node
<
E
>
|
undefined
;
next
:
Node
<
E
>
;
prev
:
Node
<
E
>
;
constructor
(
element
:
E
)
{
this
.
element
=
element
;
this
.
next
=
Node
.
Undefined
;
this
.
prev
=
Node
.
Undefined
;
}
}
export
class
LinkedList
<
E
>
{
private
_first
:
Node
<
E
>
|
u
ndefined
;
private
_last
:
Node
<
E
>
|
u
ndefined
;
private
_first
:
Node
<
E
>
=
Node
.
U
ndefined
;
private
_last
:
Node
<
E
>
=
Node
.
U
ndefined
;
private
_size
:
number
=
0
;
get
size
():
number
{
...
...
@@ -26,12 +31,12 @@ export class LinkedList<E> {
}
isEmpty
():
boolean
{
return
!
this
.
_first
;
return
this
.
_first
===
Node
.
Undefined
;
}
clear
():
void
{
this
.
_first
=
u
ndefined
;
this
.
_last
=
u
ndefined
;
this
.
_first
=
Node
.
U
ndefined
;
this
.
_last
=
Node
.
U
ndefined
;
this
.
_size
=
0
;
}
...
...
@@ -45,7 +50,7 @@ export class LinkedList<E> {
private
_insert
(
element
:
E
,
atTheEnd
:
boolean
):
()
=>
void
{
const
newNode
=
new
Node
(
element
);
if
(
!
this
.
_first
)
{
if
(
this
.
_first
===
Node
.
Undefined
)
{
this
.
_first
=
newNode
;
this
.
_last
=
newNode
;
...
...
@@ -69,7 +74,7 @@ export class LinkedList<E> {
shift
():
E
|
undefined
{
if
(
!
this
.
_first
)
{
if
(
this
.
_first
===
Node
.
Undefined
)
{
return
undefined
;
}
else
{
const
res
=
this
.
_first
.
element
;
...
...
@@ -79,7 +84,7 @@ export class LinkedList<E> {
}
pop
():
E
|
undefined
{
if
(
!
this
.
_last
)
{
if
(
this
.
_last
===
Node
.
Undefined
)
{
return
undefined
;
}
else
{
const
res
=
this
.
_last
.
element
;
...
...
@@ -89,32 +94,32 @@ export class LinkedList<E> {
}
private
_remove
(
node
:
Node
<
E
>
):
void
{
let
candidate
:
Node
<
E
>
|
undefined
=
this
.
_first
;
while
(
candidate
instanceof
Node
)
{
let
candidate
:
Node
<
E
>
=
this
.
_first
;
while
(
candidate
!==
Node
.
Undefined
)
{
if
(
candidate
!==
node
)
{
candidate
=
candidate
.
next
;
continue
;
}
if
(
candidate
.
prev
&&
candidate
.
next
)
{
if
(
candidate
.
prev
!==
Node
.
Undefined
&&
candidate
.
next
!==
Node
.
Undefined
)
{
// middle
const
anchor
=
candidate
.
prev
;
anchor
.
next
=
candidate
.
next
;
candidate
.
next
.
prev
=
anchor
;
}
else
if
(
!
candidate
.
prev
&&
!
candidate
.
next
)
{
}
else
if
(
candidate
.
prev
===
Node
.
Undefined
&&
candidate
.
next
===
Node
.
Undefined
)
{
// only node
this
.
_first
=
u
ndefined
;
this
.
_last
=
u
ndefined
;
this
.
_first
=
Node
.
U
ndefined
;
this
.
_last
=
Node
.
U
ndefined
;
}
else
if
(
!
candidate
.
next
)
{
}
else
if
(
candidate
.
next
===
Node
.
Undefined
)
{
// last
this
.
_last
=
this
.
_last
!
.
prev
!
;
this
.
_last
.
next
=
u
ndefined
;
this
.
_last
.
next
=
Node
.
U
ndefined
;
}
else
if
(
!
candidate
.
prev
)
{
}
else
if
(
candidate
.
prev
===
Node
.
Undefined
)
{
// first
this
.
_first
=
this
.
_first
!
.
next
!
;
this
.
_first
.
prev
=
u
ndefined
;
this
.
_first
.
prev
=
Node
.
U
ndefined
;
}
// done
...
...
@@ -128,7 +133,7 @@ export class LinkedList<E> {
let
node
=
this
.
_first
;
return
{
next
():
IteratorResult
<
E
>
{
if
(
!
node
)
{
if
(
node
===
Node
.
Undefined
)
{
return
FIN
;
}
...
...
@@ -145,7 +150,7 @@ export class LinkedList<E> {
toArray
():
E
[]
{
const
result
:
E
[]
=
[];
for
(
let
node
=
this
.
_first
;
node
instanceof
Node
;
node
=
node
.
next
)
{
for
(
let
node
=
this
.
_first
;
node
!==
Node
.
Undefined
;
node
=
node
.
next
)
{
result
.
push
(
node
.
element
);
}
return
result
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录