77 lines
1.7 KiB
Plaintext
77 lines
1.7 KiB
Plaintext
# list.nas
|
|
# valkmjolnir 2021/3/31
|
|
|
|
var new = func() {
|
|
var (begin, end, len) = (nil, nil, 0);
|
|
return {
|
|
push_back: func(elem) {
|
|
var tmp = {
|
|
elem: elem,
|
|
prev: nil,
|
|
next: nil
|
|
};
|
|
if (end!=nil) {
|
|
end.next = tmp;
|
|
tmp.prev = end;
|
|
end = tmp;
|
|
} else {
|
|
begin = end = tmp;
|
|
}
|
|
len += 1;
|
|
},
|
|
push_front: func(elem) {
|
|
var tmp = {
|
|
elem: elem,
|
|
prev: nil,
|
|
next: nil
|
|
};
|
|
if (begin!=nil) {
|
|
begin.prev = tmp;
|
|
tmp.next = begin;
|
|
begin = tmp;
|
|
} else {
|
|
begin = end = tmp;
|
|
}
|
|
len += 1;
|
|
},
|
|
pop_back: func() {
|
|
if (end!=nil) {
|
|
end = end.prev;
|
|
}
|
|
if (end==nil) {
|
|
begin = nil;
|
|
} else {
|
|
end.next = nil;
|
|
}
|
|
if (len) {
|
|
len -= 1;
|
|
}
|
|
},
|
|
pop_front: func() {
|
|
if (begin!=nil) {
|
|
begin = begin.next;
|
|
}
|
|
if (begin==nil) {
|
|
end = nil;
|
|
} else {
|
|
begin.prev = nil;
|
|
}
|
|
if (len) {
|
|
len -= 1;
|
|
}
|
|
},
|
|
front: func() {
|
|
if (begin!=nil) {
|
|
return begin.elem;
|
|
}
|
|
},
|
|
back: func() {
|
|
if (end!=nil) {
|
|
return end.elem;
|
|
}
|
|
},
|
|
length: func() {
|
|
return len;
|
|
}
|
|
};
|
|
} |