Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- interface Node<T> {
- prev: Node<T>,
- value: T,
- next: Node<T>,
- }
- export default class LinkedList<T> {
- private _head: Node<T>;
- private _tail: Node<T>;
- constructor() {
- this._head = null;
- this._tail = null;
- }
- addToHead(value: T): void {
- const newNode: Node<T> = {
- prev: null,
- value: value,
- next: this._head,
- };
- // Linked list has already been initialized
- if (this._head) this._head.prev = newNode;
- // Linked list has not been initialized yet
- else this._tail = newNode;
- this._head = newNode;
- }
- addToTail(value: T): void {
- const newNode: Node<T> = {
- prev: this._tail,
- value: value,
- next: null,
- };
- // Linked list has already been initialized
- if (this._tail) this._tail.next = newNode;
- // Linked list has not been initialized yet
- else this._head = newNode;
- this._tail = newNode;
- }
- removeHead(): T {
- if (!this._head) return null;
- const value = this._head.value;
- this._head = this._head.next;
- // Linked list has at least one node
- if (this._head) this._head.prev = null;
- // Linked list is empty
- else this._tail = null;
- return value;
- }
- removeTail(): T {
- if (!this._tail) return null;
- const value = this._tail.value;
- this._tail = this._tail.prev;
- // Linked list has at leaast one node
- if (this._tail) this._tail.next = null;
- // Linked list is empty
- else this._head = null;
- return value;
- }
- search(value: T): boolean {
- for (let pointer: Node<T> = this._head; pointer; pointer = pointer.next)
- if (pointer.value === value) return true;
- return false;
- }
- indexOf(value: T): Array<number> {
- const indices: Array<number> = [];
- for (let pointer: Node<T> = this._head, i: number = 0; pointer; pointer = pointer.next, i++)
- if (pointer.value === value) indices.push(i);
- return indices;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement