class Node {
constructor(value) {
this.value = value
this.prev = null
this.next = null
}
}
class LinkedList {
constructor() {
this.head = null
this.length = 0
}
static createNode(value) {
return new Node(value)
}
printList () {
console.log("List start")
let node = this.head
let k = 0
while (node != null && k < this.length) {
console.log(node.value)
node = node.next
k ++
}
console.log("List end")
}
}
function circleStartInLinkedlist (list) {
if(list.head == null) return null
let fastPointer = slowPointer = list.head
while ((fastPointer != null) && (fastPointer.next != null)) {
fastPointer = fastPointer.next.next
slowPointer = slowPointer.next
if (fastPointer == slowPointer)
break
}
if (fastPointer == slowPointer) {
slowPointer = list.head
while (fastPointer != slowPointer) {
fastPointer = fastPointer.next
slowPointer = slowPointer.next
}
return slowPointer
} else {
return null
}
}
function testCircleInList ( ) {
let list = new LinkedList()
list.head = LinkedList.createNode(0)
let tmpNode = list.head
list.length ++
tmpNode.next = LinkedList.createNode(1)
tmpNode = tmpNode.next
list.length ++
tmpNode.next = LinkedList.createNode(2)
tmpNode = tmpNode.next
list.length ++
tmpNode.next = LinkedList.createNode(3)
let node3 = tmpNode.next
tmpNode = tmpNode.next
list.length ++
tmpNode.next = LinkedList.createNode(4)
tmpNode = tmpNode.next
list.length ++
tmpNode.next = LinkedList.createNode(5)
tmpNode = tmpNode.next
list.length ++
tmpNode.next = LinkedList.createNode(6)
tmpNode = tmpNode.next
list.length ++
tmpNode.next = LinkedList.createNode(7)
tmpNode = tmpNode.next
list.length ++
tmpNode.next = node3
// list.printList()
let circleStartNode = circleStartInLinkedlist(list)
console.log("List circle start at --> " + circleStartNode.value)
}
testCircleInList();
console