leetcode25-k个一组翻转链表

原题链接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
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值