25. Reverse Nodes in k-Group
题目简介
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
题目给我们一个链表头 head 以及一个数字 k
要求我们把链表中连续的 k 个元素翻转,并最终返回新链表头
解题思路
这题是 24 的扩展版,如果 k = 2,这题就是 24 题
这题一样可以用递归或者循环来做,我们只讲解递归部份
递归的思路是:我们每次找到 k 个元素,将其翻转,然后把剩下的链表交给当前方法递归,最后返回翻转完的链表头
Javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
var reverseKGroup = function(head, k) {
if(!head) {
return null
}
let tail = head
let i=0
while(i++ < k) {
if(!tail) {
return head
}
tail = tail.next
}
const newHead = reverseList(head, tail)
head.next = reverseKGroup(tail, k)
return newHead
};
// [head, end)
const reverseList = (head, end) => {
let prev = end
while(head !== end) {
let next = head.next
head.next = prev
prev = head
head = next
}
return prev
}