const crossing = { name: "交叉点", next: { name: '继续1', next: { name: '继续2', next: null } } }
const linkList1 = { name: 1, next: { name: 2, next: { name: 3, next: { name: 3, next: crossing } } } }
const linkList2 = { name: 'a', next: { name: 'c', next: { name: 'd', next: crossing } } }
function countLinkListLength(linkList) {
let len = 0
while (linkList?.name) {
len++
linkList = linkList.next
}
return len
}
function searchCrossing(linkList1, linkList2) {
const len1 = countLinkListLength(linkList1)
const len2 = countLinkListLength(linkList2)
if (len1 === 0 || len2 === 0) {
return
}
if (len1 > len2) {
[linkList1, linkList2] = [linkList2, linkList1]
}
const map = new Map()
do {
map.set(linkList1, linkList1)
linkList1 = linkList1.next
} while (linkList1)
do {
if (map.has(linkList2)) {
return linkList2
}
linkList2 = linkList2.next
} while (linkList2)
}
console.log(searchCrossing(linkList1, linkList2))