//如何判断链表有环?
function Node(ele){
this.element = ele
this.next = null
}
//首先创建带环链表
var lian = {
head: null
}
//添加结点
function append(lian, ele){
var node = new Node(ele)
var current
if(lian.head===null){
lian.head = node
}else{
current = lian.head
while(current.next){
current = current.next
}
current.next = node
}
}
//查询指定节点
function search(lian, ele){
var current = lian.head
while(current){
if(current.element === ele){
return current
}
current = current.next
}
return '没有'
}
append(lian, 1)
append(lian, 2)
//使lian为带环的链表
search(lian,2).next = search(lian,1)
function judge(lian){
//采用遍历链表添加标识位的方式,每经过一个结点就为这个节点添加visited标志位表示已经过
//那么一旦循环到visited=1的节点就说明这个节点已经被遍历过了
var tempLian = Object.assign(lian)
var current = tempLian.head
current.visited = 1
while(current.next){
current = current.next
if(current.visited === 1){ //表示该节点已经浏览过了 说明有环
return true
}else{
current.visited = 1
}
}
return false
}
console.log(judge(lian))
//当注释掉search(lian,2).next = search(lian,1)时返回false
//当没有注释掉search(lian,2).next = search(lian,1)时返回true
判断链表有环
最新推荐文章于 2024-04-22 20:33:24 发布