思考的时候确实没想到用哈希表存储的方法,想的是可以通过构建一个双向链表的数据结构进行构建,但是存储链表头部端点的逻辑有些复杂。
其实用哈希表很简单的,只要把某个元素作为 key,它所有连接的其他元素都存到数组里。如果只有一个其他元素,那么它就是端点。然后再一个个往回找就可以了。
代码如下:
const restoreArray = (adjacentPairs) => {
const linkMap = new Map();
for (let pair of adjacentPairs) {
linkMap.get(pair[0]) ? linkMap.get(pair[0]).push(pair[1]) : linkMap.set(pair[0], [pair[1]]);
linkMap.get(pair[1]) ? linkMap.get(pair[1]).push(pair[0]) : linkMap.set(pair[1], [pair[0]]);
}
let start;
for (let entry of linkMap.entries()) {
if (entry[1].length === 1) {
start = entry[0];
break;
}
}
const res = [start, linkMap.get(start)[0]];
for (let i = 2; i < adjacentPairs.length + 1; i++) {
const links = linkMap.get(res[i - 1]);
res[i] = links[0] === res[i - 2] ? links[1] : links[0];
}
return res;
};