JSRUN
FindFirstNode 寻找链表的头节点,每个节点,有 id 和 nextId 两个属性,nextId 表示指向节点 Id。现在请实现一个办法寻找该链表的头节点。 PS. 考虑一下链表环状,以及节点不在链表内等异常情况,出现异常时,打印异常消息即可。
使用此草稿 删除草稿
FindFirstNode
寻找链表的头节点,每个节点,有 id 和 nextId 两个属性,nextId 表示指向节点 Id。现在请实现一个办法寻找该链表的头节点。 PS. 考虑一下链表环状,以及节点不在链表内等异常情况,出现异常时,打印异常消息即可。
const findFirstNode = (nodeList)=>{ const startArr = []; const endArr = []; nodeList.forEach(ite => { let nextItem, preItem; nodeList.some(i => { if (i.id === ite.nextId) { nextItem = i; } else if (i.nextId === ite.id) { preItem = i; } return nextItem && preItem; }); if (!nextItem) endArr.push(ite); if (!preItem) startArr.push(ite); }); if (startArr.length >= 2) return console.error('链表出现了中断'); if (!startArr.length || !endArr.length) return console.error('这可能是一个环表'); return startArr[0].id; } const list = [{"id":3,"nextId":1},{"id":1,"nextId":2},{"id":2,"nextId":3}]; console.log(`结果: ${findFirstNode(list)}`);