0
点赞
收藏
分享

微信扫一扫

面试必刷TOP101:3、链表中的节点每k个一组翻转

一、题目

将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表

如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样

你不能更改节点中的值,只能更改节点本身。

面试必刷TOP101:3、链表中的节点每k个一组翻转_整型

二、题解

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode reverseKGroup (ListNode head, int k) {
        // write code here
        if(k <= 1) return head;
        if(head == null) return head;
        ListNode node = head;
        int len = length(head);
        head = node;
        int sx = len / k;    //分成sx块向下取整(默认向下) 因为处不尽的后面必然凑不满k个
        ListNode result = new ListNode(0);
        ListNode now = result;
        int cnt = 0;
        for(int i = 0; i < sx; i ++){
            ListNode tmp = null;
            for(int j = 0; j < k; j ++){    //将第i块的元素翻转
                ListNode bl = head.next;
                head.next = tmp;
                tmp = head;
                head = bl;
            } 
            now.next = tmp;
            while(now.next != null) now = now.next;    //将now更新到最前的一个点
        }
        now.next = head;
        return result.next;
    }
    public int length(ListNode now){    //获取链表长度
        int cnt = 0;
        if(now != null) cnt = 1;
        while(now.next != null){
            cnt ++; now = now.next;
        }
        return cnt;
    }
}

举报

相关推荐

0 条评论