function LinkNode(val) {
this.prev = this.next = null
this.val = val
}
LinkNode.formArray = (arr) => {
let head = null, prev = null
arr.map(r => {
let node = new LinkNode(r)
if (!head) head = node
prev ? prev.next = node : ''
prev = node
})
return head
}
LinkNode.prototype.toString = function () {
let arr = []
let head = this
while (head) {
arr.push(head.val)
head = head.next
}
console.log(arr.join(' -> '))
return arr
}
let reverse = (node) => {
if (node.next) {
let nNode = reverse(node.next)
node.next.next = node
node.next = null
return nNode
}
else return node
}
LinkNode.reverse = function (head) {
return reverse(head)
}
LinkNode.prototype.reverse = function () {
let head = this
return reverse(head)
}
let l = LinkNode.formArray([1, 2, 'a', 'b', 'c'])
l.toString()
let n = l.reverse()
n.toString()
LinkNode.prototype.reverseKnodes = function (k) {
let head = last = this
let ind = 1
while (ind < k) {
last = last.next
if (!last) break
ind++
}
if(k != ind) return head
let nextHead = last ? last.next : null
last.next = null
let h = LinkNode.reverse(head)
head.next = nextHead ? nextHead.reverseKnodes(k) : null
return h
}
l = LinkNode.formArray([1, 2, 'a', 'b', 3])
n = l.reverseKnodes(2)
n.toString()