const findFirstNode = (nodeList)=>{
if(nodeList.length === 0){
console.log('emtpy list')
return
}
const iteratedNodes=[]
function findNextNode(startNode,nodes){
const prevNodeIndex= nodes.findIndex(node=>{
return node.nextId===startNode.id
})
const isEnd=prevNodeIndex<0
if(isEnd){
return startNode.id
}
let currentNode = nodes[prevNodeIndex]
const isDeadLoop=iteratedNodes.map(o=>o.id).includes(currentNode.id)
if(isDeadLoop){
console.log('circular chain table found!')
return
}
iteratedNodes.push(currentNode)
return findNextNode(currentNode,nodes)
}
return findNextNode(nodeList[0],nodeList)
}
const list = [{"id":3,"nextId":0},{"id":1,"nextId":2},{"id":2,"nextId":3}];
console.log(findFirstNode(list));
const circularList = [{"id":3,"nextId":1},{"id":1,"nextId":2},{"id":2,"nextId":3}];
console.log(findFirstNode(circularList));