AcWing 827. 双链表 ( JavaScript )
原题链接
简单
作者:
gaobowen
,
2019-11-19 17:21:06
,
所有人可见
,
阅读 748
let val = new Array(10010);
let l = new Array(10010).fill(0);
let r = new Array(10010).fill(0);
//0 是左端点; 1 是右端点;
r[0] = 1; l[1] = 0;
let idx = 2;
let insertR = (k, x) => {
val[idx] = x;
l[idx] = k, r[idx] = r[k];
l[r[k]] = idx, r[k] = idx++;
}
let insertL = (k, x) => {
insertR(l[k], x);
}
let addR = x => {
insertR(l[1], x);
}
let addL = x => {
insertR(0, x);
}
let remove = k => {
l[r[k]] = l[k];
r[l[k]] = r[k];
}
let buf = '';
process.stdin.on('readable', function () {
let chunk = process.stdin.read();
if (chunk) buf += chunk.toString();
});
let getInputArgs = line =>
line.split(' ').filter(s => s !== '').map(x => parseInt(x));
process.stdin.on('end', function () {
let m = 0;
buf.split('\n').forEach(function (line, lineIdx) {
if (lineIdx === 0) {
let a = getInputArgs(line);
m = a[0];
} else if (lineIdx <= m) {
switch (line[0]) {
case 'R': {
let arr = getInputArgs(line.slice(1));
addR(arr[0]);
break;
}
case 'L': {
let arr = getInputArgs(line.slice(1));
addL(arr[0]);
break;
}
case 'I': {
let arr = getInputArgs(line.slice(2));
//idx从2开始,k+1.
if (line[1] === 'R') insertR(arr[0] + 1, arr[1]);
else insertL(arr[0] + 1, arr[1]);
break;
}
case 'D': {
let arr = getInputArgs(line.slice(1));
remove(arr[0] + 1);
break;
}
}
if (lineIdx === m) {
let result = []
for (let i = r[0]; i !== 1; i = r[i]) {
result.push(val[i]);
}
console.log(result.join(' '));
}
}
});
});