描述
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
数据范围: \ 0 \le n \le 2000 0≤n≤2000 , 1 \le k \le 20001≤k≤2000 ,链表中每个元素都满足 0 \le val \le 10000≤val≤1000
要求空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
例如:
给定的链表是 1\to2\to3\to4\to51→2→3→4→5
对于 k = 2k=2 , 你应该返回 2\to 1\to 4\to 3\to 52→1→4→3→5
对于 k = 3k=3 , 你应该返回 3\to2 \to1 \to 4\to 53→2→1→4→5
/*
* 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) return head;
let next = head.next;
let arr = [head.val];
while(next){
arr.push(next.val);
next = next.next;
}
let index = 0;
let arrAll = [];
let temp = [];
let remainder = arr.length % k;
// 分割数组
for(let i = 0 ;i < arr.length - remainder; i++){
if(index < k - 1){
temp.push(arr[i]);
index += 1;
} else{
temp.push(arr[i]);
temp = temp.reverse();
temp.forEach(item => arrAll.push(item));
temp = [];
index = 0;
}
}
next = head;
for(let i = 0;i < arrAll.length; i++){
next.val = arrAll[i];
next = next.next;
}
console.log(head);
return head;
}
module.exports = {
reverseKGroup : reverseKGroup
};
这一题不是按要求做出来的,先刷完所有的,后面有时间在按要求来
来自牛客编程题 https://www.nowcoder.com/exam/oj