链表:每k个一组翻转

189 阅读1分钟

image.png

方法

涉及到有规律的,可以想想使用递归 首先对每K个进行依次反转,然后将上个翻转的链表的最后节点的next指向下个翻转链表的头节点,整个链表就被串联起来了

  1. 初始:123 456
  2. 翻转:321 654
  3. 连接:1.next = 6 【1最初的头节点,head】
function reverseKGroup( head ,  k ) {
    if(!head) return head;
 
    let pre = null;
    let cur = head;
    let node = head;
    for(let i = 0; i<k; i++) {
        if(node === null) return head; // 校验是否满足k
        node = node.next;
    }
    
    for(let i = 0; i<k; i++) {
        const old = cur.next;
        cur.next = pre;
        pre = cur;
        cur = old;
    }
    
    head.next = reverseKGroup(cur, k); // 每次循环 都接在本次的head上
    
  return pre; // 最终返回头节点
}

`