Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
k is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
Example:
Given this linked list: 1->2->3->4->5
For k = 2, you should return:
2->1->4->3->5
For k = 3, you should return:
3->2->1->4->5
Note:
Connect it back to the main linked list.
/**
this.val = val;
this.next = null;
@return {ListNode} */ let reverseKGroup = function(head, k) { const prehead = { next: head } let p = prehead while (true) { let n = k let pEndNext = p.next while (pEndNext && n) { pEndNext = pEndNext.next n– }
if (n !== 0) { break }
const nextp = p.next // The first node will be the last after reverse p.next = reverseLinkList(p.next, pEndNext) p = nextp }
return prehead.next };
function reverseLinkList (head, nullNode = null) { let prev = nullNode let curr = head while (curr !== nullNode) { const next = curr.next curr.next = prev prev = curr curr = next } return prev };
Template generated via Leetmark.