BM3 链表中的节点每k个一组翻转
/*
* function ListNode(x){
* this.val = x;
* this.next = null;
* }
*/
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
function reverseKGroup(head, k) {
// write code here
if (!head || k === 1) return head;
let newHead = new ListNode(0);
newHead.next = head;
head = newHead;
let prev = head;
let curr = prev.next;
let next = null;
let isNext = curr;
while (curr) {
// 判断当前节点后面是否还有足够的节点(少于k个, 直接返回整个链表)
for (let i = 1; i < k; i++) {
if (isNext.next === null) return head.next;
isNext = isNext.next;
}
// head(0) -> 1 -> 2 -> 3 -> 4 -> 5
// pn cn nn
// head(0) -> 2 -> 1 -> 3 -> 4 -> 5
// pn nn c cn cnn (之后的循环每次初始设 next = cn)
for (let i = 1; i < k; i++) {
next = curr.next;
curr.next = next.next;
next.next = prev.next;
prev.next = next;
}
// prev 节点的下一个节点设为第 k 个节点, 也就是将 prev 设为之前的 curr
// curr = prev.next 节点设为第 k 个节点, 也就是 prev.next
prev = curr;
curr = prev.next;
isNext = curr;
}
return head.next;
}
module.exports = {
reverseKGroup: reverseKGroup,
};
如有问题望指正

京公网安备 11010502036488号