class MyArrayList<T> {
length: number;
elements: T[];
constructor() {
this.length = 0;
this.elements = new Array<T>(0);
}
// 요소 추가
add(t: T): void {
this.elements[this.length] = t;
this.length += 1;
}
// 특정 인덱스에 요소 추가
insert(index: number, t: T): void {
for (let i = index; i < this.length; i++) {
this.elements[i + 1] = this.elements[i];
}
this.elements[index] = t;
this.length += 1;
}
// 특정 인덱스 요소 삭제
deleteByIndex(index: number): boolean {
if (index < 0 || index > this.length - 1) return false;
for (let i = index; i < this.length - 1; i++) {
this.elements[i] = this.elements[i + 1];
}
this.length -= 1;
return false;
}
// 특정 요소 삭제
delete(t: T): boolean {
for (let i = 0; i < this.length; i++) {
if (this.elements[i] === t) {
for (let j = i; j < this.length - 1; j++) {
this.elements[j] = this.elements[j + 1];
}
this.length--;
return true;
}
}
return false;
}
// 특정 인덱스 요소 취득
get(index: number): T {
if (index < 0 || index > this.length - 1) {
throw new Error("IndexOutOfBoundsException");
}
return this.elements[index];
}
// 특정 요소 인덱스 취득
indexOf(t: T): number {
for (let i = 0; i < this.length; i++) {
if (this.elements[i] === t) {
return i;
}
}
return -1;
}
// 특정 요소의 유무
contains(t: T): boolean {
for (let i = 0; i < this.length; i++) {
if (this.elements[i] === t) {
return true;
}
}
return false;
}
// 리스트의 length 취득
size(): number {
return this.length;
}
// 빈 리스트인지 여부
isEmpty(): boolean {
return this.length === 0;
}
// length 0으로 초기화
clear(): void {
this.length = 0;
this.elements = new Array<T>(0);
}
}
next pointer를 잘 조정해주어야 한다.