提交 5945ecb1 编写于 作者: J Johannes Rieken

linkedlist - push/unshift

上级 b726d868
......@@ -16,7 +16,7 @@ export default class CallbackList {
if (!this._callbacks) {
this._callbacks = new LinkedList<[Function, any]>();
}
const remove = this._callbacks.insert([callback, context]);
const remove = this._callbacks.push([callback, context]);
if (Array.isArray(bucket)) {
bucket.push({ dispose: remove });
}
......
......@@ -24,16 +24,33 @@ export class LinkedList<E> {
return !this._first;
}
insert(element: E) {
unshift(element: E) {
return this.insert(element, false);
}
push(element: E) {
return this.insert(element, true);
}
private insert(element: E, atTheEnd: boolean) {
const newNode = new Node(element);
if (!this._first) {
this._first = newNode;
this._last = newNode;
} else {
} else if (atTheEnd) {
// push
const oldLast = this._last;
this._last = newNode;
newNode.prev = oldLast;
oldLast.next = newNode;
} else {
// unshift
const oldFirst = this._first;
this._first = newNode;
newNode.next = oldFirst;
oldFirst.prev = newNode;
}
return () => {
......
......@@ -21,43 +21,43 @@ suite('LinkedList', function () {
assert.equal(elements.length, 0);
}
test('Insert/Iter', function () {
test('Push/Iter', function () {
const list = new LinkedList<number>();
list.insert(0);
list.insert(1);
list.insert(2);
list.push(0);
list.push(1);
list.push(2);
assertElements(list, 0, 1, 2);
});
test('Insert/Remove', function () {
test('Push/Remove', function () {
let list = new LinkedList<number>();
let disp = list.insert(0);
list.insert(1);
list.insert(2);
let disp = list.push(0);
list.push(1);
list.push(2);
disp();
assertElements(list, 1, 2);
list = new LinkedList<number>();
list.insert(0);
disp = list.insert(1);
list.insert(2);
list.push(0);
disp = list.push(1);
list.push(2);
disp();
assertElements(list, 0, 2);
list = new LinkedList<number>();
list.insert(0);
list.insert(1);
disp = list.insert(2);
list.push(0);
list.push(1);
disp = list.push(2);
disp();
assertElements(list, 0, 1);
});
test('Insert/toArray', function () {
test('Push/toArray', function () {
let list = new LinkedList<string>();
list.insert('foo');
list.insert('bar');
list.insert('far');
list.insert('boo');
list.push('foo');
list.push('bar');
list.push('far');
list.push('boo');
assert.deepEqual(
list.toArray(),
......@@ -69,4 +69,53 @@ suite('LinkedList', function () {
]
);
});
test('unshift/Iter', function () {
const list = new LinkedList<number>();
list.unshift(0);
list.unshift(1);
list.unshift(2);
assertElements(list, 2, 1, 0);
});
test('unshift/Remove', function () {
let list = new LinkedList<number>();
let disp = list.unshift(0);
list.unshift(1);
list.unshift(2);
disp();
assertElements(list, 2, 1);
list = new LinkedList<number>();
list.unshift(0);
disp = list.unshift(1);
list.unshift(2);
disp();
assertElements(list, 2, 0);
list = new LinkedList<number>();
list.unshift(0);
list.unshift(1);
disp = list.unshift(2);
disp();
assertElements(list, 1, 0);
});
test('unshift/toArray', function () {
let list = new LinkedList<string>();
list.unshift('foo');
list.unshift('bar');
list.unshift('far');
list.unshift('boo');
assert.deepEqual(
list.toArray(),
[
'boo',
'far',
'bar',
'foo',
]
);
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册