ts-ds-tool
Version:
Data structure and algorithm of TypeScript
95 lines (94 loc) • 2.4 kB
JavaScript
import { LinkList } from "../linklist/LinkList";
export class CycleLinkList {
constructor() {
this.linklist = new LinkList();
}
setCircle() {
this.getTailNode().setNext(this.getHeadNode());
}
get Size() {
return this.linklist.Size;
}
append(value) {
const result = this.linklist.append(value);
this.setCircle();
return result;
}
prepend(value) {
const result = this.linklist.prepend(value);
this.setCircle();
return result;
}
deleteNode(arg) {
const isFirstOrLast = this.linklist.findNode(arg) === this.getHeadNode()
|| this.linklist.findNode(arg) === this.getTailNode(), result = this.linklist.deleteNode(arg);
if (isFirstOrLast) {
this.setCircle();
}
return result;
}
findNode(arg) {
return this.linklist.findNode(arg);
}
getHeadNode() {
return this.linklist.getHeadNode();
}
getTailNode() {
return this.linklist.getTailNode();
}
shift() {
const result = this.linklist.shift();
if (this.Size) {
this.setCircle();
}
return result;
}
pop() {
const result = this.linklist.pop();
if (this.Size) {
this.setCircle();
}
return result;
}
insertAfter(value, oriNode) {
return this.linklist.insertAfter(value, oriNode);
}
clear() {
this.linklist.clear();
}
toString() {
return this.linklist.toString();
}
static fromArray(arr) {
if (!arr) {
return new CycleLinkList();
}
const linkList = new CycleLinkList();
arr.forEach(item => {
linkList.append(item);
});
return linkList;
}
toArray() {
return this.linklist.toArray();
}
getEnumerator() {
let temp = this.getHeadNode();
const enumerator = {
next: () => {
temp = temp.Next;
enumerator.Current = {
value: temp.Value,
done: false,
};
return enumerator;
},
Current: {
value: temp.Value,
done: false,
},
};
return enumerator;
}
}
export default CycleLinkList;