壹題git
第 115 題:寫一個單向鏈數據結構的 js 實現並標註複雜度
class LinkList {
head: LinkNode;
constructor() {
this.head = null;
}
// O(n)
find(value: object) {
let currNode = this.head;
while(currNode.value !== value) {
currNode = currNode.next;
}
return currNode;
}
// O(n)
findPrev(value: object) {
let currNode = this.head;
while (currNode.next !== null && currNode.next.value !== value) {
currNode = currNode.next;
}
return currNode;
}
// O(n)
delete(value: object) {
const prevNode = this.findPrev(value);
const currNode = prevNode.next;
prevNode.next = currNode.next;
}
// O(n)
insertAfter(newValue: object, value: object) {
const currNode = this.find(value);
const newNode = new NodeEle(newValue, currNode.next);
currNode.next = newNode;
return newNode;
}
// O(n)
insertBefore(newValue: object, value: object) {
const prevNode = this.findPrev(value);
const newNode = new NodeEle(newValue, prevNode.next);
prevNode.next = newNode;
return newNode;
}
}
interface LinkNode {
value: object;
next: LinkNode | null;
}
class NodeEle {
value: object;
next: LinkNode | null;
constructor(value: object, next: LinkNode | null) {
this.value = value;
this.next = next;
}
}
複製代碼