原题链接:leetcode25
题目描述:给定一个链表,给定一个值k,每k个结点进行翻转,剩下不足k个的结点 原序输出
思路:
带有头结点的链表逆置
let newhead = new ListNode(0,head)
let cur = newhead.next
newhead.next = null
while(cur!=null){
let next = cur.next
cur.next = newhead.next
newhead.next = cur
cur = next
}
return newhead.next
每k个结点进行一次逆置处理,首先确定逆置的左右
留坑-思路正确 代码还需修改
/**
* 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) {
let newhead = new ListNode(0,head)
// 链表的结点个数
let n= 0
while(head){
n++
head = head.next
}
console.log(n)
if(n<k) return head
let cur = newhead.next
// newhead.next =null //避免出现环
let prev = newhead //prev 移动指针为了避免出现环
let level = 0
while(cur!=null){
// let next = cur.next
// cur.next = newhead.next
// newhead.next = cur
// cur = next
prev.next = null
// 剩下的结点大于k个 进行逆置处理
for(let i=level*k;n>=k*(level+1)&& i<k*(level+1);i++){
let next = cur.next
cur.next = prev.next
prev.next = cur
// 重新获取要逆置的结点的开始前一个结点
if(i==k*(level+1)-1){
prev = cur
}
cur = next
}
level ++
}
return newhead.next
};